Préface
Dans la conception de microservices, les appels entre les services sont normaux. Habituellement, nous utilisons HttpClient pour implémenter des appels vers des ressources distantes. Cette méthode nécessite une connaissance de l'adresse du service, de l'adresse d'interface commerciale, etc., et vous devez attendre qu'elle soit terminée avant de pouvoir l'appeler. Ce n'est pas une bonne chose pour le développement intégré. Il a une forte dépendance entre les services A et B. Alors, comment pouvons-nous le découpler? La réponse est le cadre OpenFeign, qui fait partie de SpringCloudy.
1 Ajouter une référence du package
'org.springframework.cloud:spring-cloud-starter-openfeign',
Remarque: Si vous ne référez pas la version SpringCloudy, il y a trop de gens, vous devez d'abord le déclarer
DependencyManagement {importations {mavenbom "org.springframework.cloud:spring-cloud-dépendances:$;2 Définir la configuration liée au profil
// Configuration des chemins de fichier par défaut Sourcesetsets {Integtest {java.srcdir file ('src / test / java') Resources.srcdir file ('src / test / ressources')}} tâche Integtest (type: test) {testclassesdirrs = sourcesets.test.output.classesdirs classPather = SourcesetS.Test.Runtimeclasspath}3 Définissez l'interface de service et définissez la pseudo-méthode, qui est la méthode du service. Vous devez connaître les paramètres de la méthode et sa valeur de retour. Vous n'avez pas à vous soucier de la mise en œuvre, juste de la maquette dans le test unitaire.
package test.lind.javalindday.feignClientDemo; import org.springframework.cloud.openfeign.feignClient; import org.springframework.context.annotation.profile; import org.sprimframework.web.bind.annotation.getmapping; / ** * simule d'autres services. * / @ Profil ("! Integtest") @ feignClient (name = "ServiceName") Interface publique MockClient {@getMapping (path = "/ BalanceSheet / {clientcode}") String BalanceSheet (String clientCode);}4 Le rôle du profil
Le profil est une variable d'environnement. Vous l'activez via ActiveProfile sur la classe. Lorsque vous l'utilisez, vous avez utilisé des annotations de profil. Dans le code ci-dessus, l'objet MockClient ne peut pas être utilisé dans l'environnement entité.
5 Ajout de l'implémentation simulée, il est automatiquement injecté, alors déclarez l'annotation @bean
package test.lind.javalindday; import static org.mockito.argumentmatchers.anystring; import static org.mockito.mockito.mockito.mockito; import static org.mockito.mockito.when; import org.springframework.context.annotation.bean; importation org.springframework.context.annotation.configuration; import org.springframework.context.annotation.profile; import test.lind.javalindday.feignClientDemo.mockClient; @ configuration @ Profile ("IntegTest") MockClientTest {@Bean public MockClient MockClient () {MockClientTest = Client. Mock (MockClient.class); Quand (client.BalanSheSheet (anyString ())) .TheReturn ("OK"); RETOUR Client; }}6 Ajouter des tests unitaires, assurez-vous de spécifier ses variables d'environnement sur les tests unitaires
package test.lind.javalindday; import static org.junit.assert.assertequals; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.boot.testStext.Context. org.springframework.test.context.activeProfiles; import org.springframework.test.context.junit4 JavalinddayApplicationTests {@autowired MockClient MockClient; @Test public void testmockClient () {asserTequals (mockClient.BalanceSheet ("OK"), "OK"); }}Après avoir exécuté le test, le MockClient sera injecté et il utilisera la classe d'implémentation Mock, car seul le profil de la classe de mise en œuvre de simulation pointe vers l'environnement entité.
Avec OpenFeign, les appels du service au service de développement peuvent être découplés à l'avenir!
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.