Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于进程内事件系统和带有代理的微服务,什么是好的用例?_Java_Event Handling_Messaging_Microservices - Fatal编程技术网

Java 对于进程内事件系统和带有代理的微服务,什么是好的用例?

Java 对于进程内事件系统和带有代理的微服务,什么是好的用例?,java,event-handling,messaging,microservices,Java,Event Handling,Messaging,Microservices,我最近看到,有不同的框架允许使用消息传递体系结构,但在过程中实现,使用相同和不同的线程。我知道的是春天、番石榴和反应堆 我的问题是关于什么是好的用例,有人希望使用它们而不是向成熟的代理发送消息。我知道它的使用允许更好地分离业务逻辑,但在微服务体系结构中,您通常会发布事件以供其他微服务使用。这样做的好处是,通过添加代理群集,您可以获得故障容忍度,其中实例中的故障导致的错误消息可以由另一个代理重试。通过发送稍后由同一系统使用的消息(特别是当订阅者在不同线程中执行时)来实现分解和执行的逻辑,在我看来,

我最近看到,有不同的框架允许使用消息传递体系结构,但在过程中实现,使用相同和不同的线程。我知道的是春天、番石榴和反应堆


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

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

微服务允许您在集群中的特定节点上执行部分代码,允许在功能强大的计算机上分配繁重的计算,在功能较弱的资源上分配次要或少量的资源。总的来说,它允许您更好地平衡性能,并在需要它的代码部分扩展资源

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

最后,从流程(第三方代理)中获取通信可以让您与更多的人、代理、流程等共享。否则,人们必须成为您流程的一部分(模块?),这真的没有效率


老实说,在单片计算机中进行进程内通信的唯一好理由是速度(内存内通信而不是有线通信)。

微服务相对于进程内通信的优势实际上并不在于它对消息消耗的改变

微服务允许您在集群中的特定节点上执行部分代码,允许在功能强大的计算机上分配繁重的计算,在功能较弱的资源上分配次要或少量的资源。总的来说,它允许您更好地平衡性能,并在需要它的代码部分扩展资源

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

最后,从流程(第三方代理)中获取通信可以让您与更多的人、代理、流程等共享。否则,人们必须成为您流程的一部分(模块?),这真的没有效率


老实说,在单片计算机中进行进程内通信的唯一好理由是速度(内存内通信而不是有线通信)。

我不同意最后一点。设计一个依靠内部消息来提高速度的系统对我来说意味着它实际上并不需要它。依靠外部代理发送消息提供了一种通过添加新实例来扩展系统的方法。这样,任何实例都可以拾取消息并继续处理该过程,当与节点故障后未处理的消息的重试相结合时,增加了故障容忍度。如果发送的每条消息都是一系列事件的一部分,那么丢失的一条消息可能会破坏整个系统,外部代理群集可以帮助修复这一问题。我不同意最后一点。设计一个依靠内部消息来提高速度的系统对我来说意味着它实际上并不需要它。依靠外部代理发送消息提供了一种通过添加新实例来扩展系统的方法。这样,任何实例都可以拾取消息并继续处理该过程,当与节点故障后未处理的消息的重试相结合时,增加了故障容忍度。如果发送的每条消息都是一系列事件的一部分,那么丢失的一条消息可能会中断整个系统,外部代理群集可以帮助修复这一问题。