[英]Two way communication between two micro services (spring boot)
我有两个微服务M1和M2 ,我需要从M1向M2发送请求,我需要等待M2的响应,因为代码基于M2的响应工作 如何在spring boot
中实现这个?
通过 controller 在您的 M1 微服务中创建 REST API 然后使用一些 ZDB93446A771 客户端库从 M2 调用它。
有很多方法可以做到这一点。 我建议您使用诸如Active MQ
、 Rabbit MQ
或Kafka
之类的消息传递工具在M1和M2之间实现producer/consumer
模式。
看看这里。
您在 M2 中创建 REST API 将消耗或响应您来自 M1 的输入
例如,您的 @RestController 中可能有以下端点,在 M2 中注释 class:
@GetMapping("/consumer")
public ResponseEntity<YourResponseDTO> produceResponse(){
YourResponseDTO result = resultOfYourBusinessLogic();
return ResponseEntity.ok(result);
然后在您的 M1 服务中,我认为最简单的方法是使用 RestTemplate 调用 M2 这是一个示例:
RestTemplate rt = new RestTemplate();
YourResponseDTO result = rt.getForObject("http://urlOfYourM2/consumer", YourResponseDTO.class);
请注意,这只是生成“YourReponseDTO”Object 的 GET 请求的调用示例。 您提供的有关消息交换的实际需求的详细信息非常少,因此 RestTemplate 可以以不同的方式使用(不同类型的请求 PUT/POST/等...)您可以根据需要使用错误处理程序、连接超时设置对其进行自定义等等
这种方法的缺点是您需要在 M1 和 M2 之间共享 DTO model 以正确 map 响应对象。 但无论如何,RestTemplate 是一个客户端实现,您可以使用它在微服务之间进行同步通信
您可以使用声明式 Rest 客户端“Spring Cloud OpenFeign”进行同步通信,如下所示:
在大多数情况下,它总是建议在服务之间使用异步通信来保持它们的解耦。 如果您想为您的案例使用异步通信,您需要将双向事件通道实现为@Harry Coder。 由于您等待立即响应,因此它需要实现诸如 SAGA、CAP 理论、断路器之类的模式来为此类实现带来可靠性,特别是您的案例。
如果立即响应至关重要,您可以使用同步通信,例如 API 调用或 gRPC。 如果您需要高性能和快速的通信 gRPC 值得为这些服务实施。 最好使用Mass Transit之类的库来减少实现中的耦合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.