繁体   English   中英

Spring 具有可配置通信方式的启动微服务

[英]Spring Boot Microservice With Configurable Communication Method

考虑这种情况:我有 N>2 个软件组件(微服务),它们可以通过两种不同的通信协议进行通信,具体取决于它们的部署方式。 换句话说,我有两个部署场景:

  1. 这些组件将部署在同一台机器上。 在这种情况下,如果我考虑性能,我不知道使用 HTTP 来传达这两个组件是否有意义。 我了解使用java在同一台机器上通信两个进程有更有效的方法,例如sockets、RMI、RPC...

  2. 这些组件将部署在 N 台不同的机器上。 在这种情况下,在我看来,使用 HTTP 来传达这些组件对我来说是有意义的。

简而言之,我想做的是能够根据我执行部署的方式来配置通信协议:在单机上,例如使用RMI,但是当我在两台机器上部署时,使用HTTP。

有谁知道我如何使用 Spring Boot 来做到这一点?

非常感谢!

RMI 或 HTTP 等协议的基本构建块是套接字通信。 如果您不是在寻找 HTTP 或 RMI 的舒适性,并且优先考虑性能,那么纯套接字通信是您的选择。

这将引发其他问题,例如部署困难。 您应该提前知道两个节点的 IP 地址。

另一种选择是 go 用于unix 域套接字,用于服务器内部通信。 为此,您必须依赖JunixSocket

如果要 go 另一条路线,请检查所有进程间通信选项。

编辑

正如您在评论中所说“这不再是两个组件的问题,而是多个组件的问题”。 在这种情况下,每个组件都应该是一个微服务,并且应该能够相互交互。 如果选择最可扩展的协议是 REST/RPC,那么两者都在底层使用 HTTP 协议。 REST 是使用 CRUD 操作针对数据源开发的 API 的理想解决方案。 RPC 更倾向于面向行动的 API。 您可以在此处找到更多详细信息以识别 REST 和 RPC 之间的区别。

我的理解是……如果组件(生产者和消费者)部署在同一主机上,则使用优化的协议,如果在不同的主机上,则使用 HTTP(s) 首先,go 必须有一个严肃的驱动程序来解决这个问题路线。 我认为这里的驱动程序是性能。 您希望在本地部署上提供更快的性能,而在分布式部署上提供相对较低的速度。 顺便说一句,鉴于我们处于分布式部署世界(或至少我们正在前进的地方)HTTP 将生存下来。 不鼓励自定义协议。

无论如何...我会说您的生产者应用程序应该处于自我修复/发现模式。 在启动时(或定期),它可以检查“优化”端点的健康状况并确定优化接收器是否在附近。 接收器需要站在负载平衡器后面。 如果接收器未启动,则 go 指向 HTTP(S) 并在运行时相应地设置此实例。

对于消费者来说,它需要保持两个门(HTTP 和优化)打开。 它应该准备好处理来自任一通道的请求。

在 SpringBoot 中,您可以实现 healthCheck 并根据优化端点的健康状况打开/关闭发射器。 如果两个端点都不健康,那么生产者肯定不会发出任何东西。 除此之外,rest 只是正常的依赖注入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM