【问题标题】:How to improve communication between microservices [closed]如何改善微服务之间的通信 [关闭]
【发布时间】:2016-07-11 21:20:25
【问题描述】:

在我们公司我们使用spring boot、微服务、spring cloud等等……我们对这个基础设施很满意,但是我还是有一些顾虑: 我们使用休息作为通信协议,即使我觉得它很棒,我仍然认为我们可以找到更好的东西。休息:

  • 您需要使用客户端和服务器(restcontroller)
  • 你需要知道服务器URI,http方式(POST, GET, PUT,...
  • 您需要知道参数的去向(正文、查询字符串)
  • ....

你不觉得如果我们有像 RMI 这样的东西会容易得多吗?我知道这是一项相当古老的技术(而且它与语言无关),但它让生活变得更轻松(您只需要一个接口及其实现)。

四处搜索,我发现了一些有趣的项目,例如 feign clients 或 spring cloud stream,但它们似乎都不是灵丹妙药。

你对这个话题有什么看法?你觉得这是一个问题吗?如果是这样,你如何处理它?

提前致谢。

【问题讨论】:

    标签: java rest spring-boot microservices


    【解决方案1】:

    在我的公司,我们使用 JMS 将“实习生”通信堆栈添加到我们的微服务堆栈中。它可靠、使用简单、高效且性能卓越。

    我们使用Apache ActiveMQ作为实现,但RabbitMQ也被广泛使用。

    【讨论】:

    • 这就是我要找的。我们也使用 rabbitMQ,并且有一个非常好的 RPC 实现(docs.spring.io/spring-amqp/reference/htmlsingle/…),但我试图了解是否有更好的解决方案。你见过这个grpc.io吗?
    • 我们不将其用作 RPC 工具,而是用作消息交换(这是 JMS 的主要目标)。 RPC 工具通常不能回答 JMS 所做的许多问题:如果网络暂时中断会发生什么?如果你想解决一个实例怎么办?所有实例?一个特定的类或类型的实例?使用 JMS 很容易解决所有这些用例,我不相信您可以使用 RPC 工具轻松地做到这一点。您可以通过 JMS 执行 RPC,但我认为将应用程序设计为消息驱动的应用程序可能更容易。
    • 你也可以看看akka,它也是设计消息驱动应用程序的好工具,广泛用于这个用例(内部微服务通信)
    【解决方案2】:

    微服务并不意味着紧密耦合,RMI 需要你的代码在两端,当你不控制另一端时这很有趣,例如不想升级的客户端,它是一个 B!@*!穿过防火墙。

    不幸的是,Soap 解决了您提到的大部分问题,Java 从来没有一个好的 Soap 堆栈。也就是说,Rest 还有其他优势,尤其是在从网页和 javascript 访问服务时。

    【讨论】:

      【解决方案3】:

      您可以使用Spring Cloud Netflix and Eureka 作为服务发现和Client-Side Load Balancing with Ribbon

      在这些人的帮助下,您可以通过“服务名称”而不是服务位置在微服务之间进行通信。

      查看this demo。它对于不理解的微服务通信应该非常有用。

      这里我们有 2 个简单的微服务和 Discovery Service 用于它们之间的通信。

      【讨论】:

      • 是的,我们确实使用它们。但是通过他们的案例,我们解决了 URI 发现问题(和平衡)我们还使用 spring cloud config server 来管理配置。但我仍然认为即使有所有这些技术,编写一个 rest 客户端/服务器也是相当昂贵的。休息是我们最好的解决方案吗?没有更容易使用的吗?
      猜你喜欢
      • 2020-09-02
      • 2016-06-10
      • 2016-03-05
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2016-08-10
      • 2019-01-18
      相关资源
      最近更新 更多