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?
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:
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
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).
@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;
}