【问题标题】:How to communicate between microservices (request/response)如何在微服务之间进行通信(请求/响应)
【发布时间】:2021-03-22 14:39:47
【问题描述】:

谁能帮助解决以下问题?

我有两个微服务 A 和 B,其中服务 A 向 B 发送请求,B 从数据库中获取数据并将响应发送回 A,根据接收到的数据,我做的操作很少。 目前我使用的是Http客户端调用,不想使用http请求?我该如何继续?

谢谢, 雷瓦蒂

【问题讨论】:

  • 您可以在两个微服务之间执行 Socket 或 Web Socket 连接。决定一个 A 和 B 理解的协议,或者一个所有微服务都会理解并基于操作传输数据的通用协议。您可以发送操作 ID 以对每个数据包的用途或按名称进行分类。如果您没有在微服务之间使用本地网络,请不要忘记添加验证。如果你能解释你不想使用 HTTP 的原因或者你打算做什么,一些上下文,它将帮助我给你一个更好更详细的答案。
  • 服务 B 获取的数据(配置数据)很少更改。因此,我不想进行 http 调用,而是将其存储在某个缓存中,以便提高性能
  • 您可以将其存储在 Redis 中,并在每次需要时通过端点调用或计划的 cron 作业更新该缓存
  • 谢谢本!我会试试 Redis DB
  • Ben,使用 Redis 缓存还是 gRPC 更适合我的用例?可以分享一下你的想法吗?

标签: microservices


【解决方案1】:

如果您想使用 HTTP 在 2 个服务之间进行通信,您需要一个允许您指定与您的请求相关的参数的 HTTP 客户端。 Java 中的示例(更多详细信息here):

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("<YOUR_ENDPOINT>"))
     .build();
client.sendAsync(request, BodyHandlers.ofString())
     .thenApply(HttpResponse::body)
     .thenAccept(System.out::println)
     .join();

如果你不想使用 HTTP 1.1,你可以看看gRPC,网上有很多关于如何使用它们的例子

【讨论】:

  • gRPC 不是使用 HTTP/2 吗?
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 2018-11-03
  • 1970-01-01
  • 2016-06-10
  • 2012-02-16
  • 2016-03-05
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多