web-dev-qa-db-fra.com

Spring Boot - comment communiquer entre microservices?

Je travaille actuellement sur un projet de microservices Spring Boot. J'ai créé des services et chaque service s'exécute séparément. Avec cela, j'ai besoin de certains services pour communiquer avec d'autres services. Comment puis-je y parvenir?

J'ai vu quelques blogs à ce sujet qui utilisent Netflix, des serveurs cloud Eureka pour y parvenir. Existe-t-il un moyen d'y parvenir dans mon environnement local sans utiliser de serveurs cloud?

7
Thiru Maran

Comme mentionné par @ g00glen00b dans les commentaires, Eureka n'est pas utilisé pour la communication entre les microservices. C'est pour la découverte de services. Je connais deux façons de communiquer avec d'autres microservices:

  1. RestTemplate
  2. Feindre le client

RestTemplate est très simple à utiliser. Il ne nécessite aucune configuration.

par exemple.

   ResponseType obj=  new RestTemplate().getForObject(URL, ResponseType.class, params);

url - l'URL

responseType - le type de la valeur de retour

params - les variables pour étendre le modèle

Spring Doc link pour votre référence

1
Abhijeet

Bien que REST soit familier et donc facile à implémenter, si vous avez besoin de communications plus flexibles et de type Java, Spring (Spring-to-Spring) HTTP Invoker peut être un bon choix.

L'invocateur HTTP de Spring est un bon choix si vous avez besoin d'un accès distant basé sur HTTP mais que vous vous fiez également à Java. Il partage l'infrastructure de base avec les invocateurs RMI, en utilisant simplement HTTP comme transport. Notez que les invocateurs HTTP sont non seulement limité à distance de Java à Java, mais aussi à Spring à la fois côté client et côté serveur (ce dernier s'applique également à l'invocateur RMI de Spring pour les interfaces non RMI).

0
Spider
@Autowired
    private RestTemplate restTemplate;

@Autowired
    private EurekaClient eurekaClient;


@RequestMapping("/dashboard/{myself}")
    public EmployeeInfo findme(@PathVariable Long myself) {
        Application application = eurekaClient.getApplication(employeeSearchServiceId);
        InstanceInfo instanceInfo = application.getInstances().get(0);
        String url = "http://" + instanceInfo.getIPAddr() + ":" + instanceInfo.getPort() + "/" + "employee/find/" + myself;
        System.out.println("URL" + url);
        EmployeeInfo emp = restTemplate.getForObject(url, EmployeeInfo.class);
        System.out.println("RESPONSE " + emp);
        return emp;
    }