java - 进程内事件系统与带有代理的微服务相比,有哪些好的用例?

标签 java event-handling messaging microservices

我最近发现有不同的框架允许使用消息传递架构,但在进程中实现,都使用相同和不同的线程。我知道的有 Spring、Guava EventBus 和 Reactor。

我的问题是关于什么是好的用例,人们希望使用它们而不是向成熟的代理发送消息。据我所知,它的使用可以更好地解耦业务逻辑,但在微服务架构中,您通常会发布事件以供其他微服务使用。这样做的优点是通过添加代理集群来获得容错能力,其中一个实例中的故障导致的错误消息可以由另一个实例重试。通过发送稍后由同一系统使用的消息来实现分解和执行的逻辑,特别是当订阅者在不同线程中执行时,在我看来很难将数据恢复到一致的状态。

最佳答案

微服务相对于进程内的优势并不真正在于它所代表的消息消费的变化。

微服务允许您在集群内的特定节点上执行部分代码,从而允许在功能强大的计算机上分配繁重的计算,在功能较弱的资源上分配辅助或轻型资源。总的来说,它可以让您更好地平衡性能,并在需要它的代码部分上扩展资源。

此外,每当您更新微服务的代码时,都不会影响其他服务,因此您的更改(和错误)是隔离的。如果所有内容都在同一进程中运行,任何错误的更新实际上都可能导致整个解决方案无法使用。

最后,将通信从您的流程(第 3 方代理)中分离出来可以让您与更多的人、代理、流程等共享它。否则人们必须成为您流程的一部分(模块?),这确实效率不高。

老实说,在单体应用中进行进程内通信的唯一充分理由是为了速度(内存中通信而不是在线通信)。

关于java - 进程内事件系统与带有代理的微服务相比,有哪些好的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44610219/

相关文章:

java - WebClient 日志记录不使用已弃用的方法 tcpClient.bootstrap()

java - java中的任何参与者模型是否允许完成任务分组?

Java线程同步

c# - SHIFT + 滚动可在 ScrollViewer UWP 中水平滚动

java - 在 Java 中是否有折叠多个事件的标准技术和/或示例?

java - 本地开发 PC 上的弹性负载均衡器

C# 事件处理方法

java - JMS 多线程概念与 MQ

java - 用于创建 JMSMessages 的装饰模式/超时应该从哪里开始

ios - 在 Objective-C 中向不同对象发送消息的最佳方式