java - 分布式事件处理

标签 java events jms hazelcast

您好,这可能是一个菜鸟问题,但我似乎无法为以下用例找到合适的解决方案:

在后端,我们有 x 个跨虚拟机分布的服务,每个服务都提供相同的服务(分布式复制)。这些服务都在分布式事件总线(例如 Hazelcast)上监听。

当一个事件到达时,例如 GetDataA,EventBus 基础结构一次将该事件发送到每个后端服务。如果服务决定要处理该事件,它就会处理该事件,并通过 EventBus 将数据返回给事件的发布者。

一旦服务决定要处理事件,则 EventBus 应停止将该事件发送到其他监听器(服务),并继续路由下一个事件(即它应该是非阻塞的)

所以这个解决方案需要一种异步运行的请求/响应分布式事件架构。

有人知道这个领域有任何可扩展的解决方案吗?我研究过 Hazelcast,但事件机制意味着所有监听器都会收到事件。我查看了 Executor 服务,但这会将代码发送到其他节点,而我正在寻找的是另一个单个节点来处理请求。

最佳答案

您可以使用 Hazelcast IExecutorService 来完成此操作。对任务的发送方式有细粒度的控制

  • 发送给所有成员
  • 发送给部分成员
  • 发送给任何成员(不关心是哪一个)
  • 发送给特定成员
  • 发送给拥有特定分区的成员。

还有一个使用 future 的选项,如果您不想阻塞,可以将 future 与异步回调机制结合起来。并且执行者不会向节点发送代码;代码(字节码)已经存在。所以你只是发送数据。

如果您不想通知所有人,而只想通知特定成员,则另一种选择是创建点对点解决方案。这可以使用 IQueue 来完成。

关于java - 分布式事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24182206/

相关文章:

java - 如何获取由lucene 4.4.0创建的索引目录中的所有术语

Java 安卓标签

c# - 有什么方法可以访问公共(public)交通传奇中已发布事件的标题?

java - Spring 入站 channel 适配器的最大数量是多少?

java - 已知的 RPC 协议(protocol)置于 JMS 之上

web-services - 面向初学者的基于 JMS 的 SOAP

java - 如何在 web.xml 之外动态配置 WebLogicCluster 属性

JavaFX 语言环境包 : Can't find bundle for base name

events - FLutter - 如何在 BLoC 初始化时分派(dispatch)事件

javascript - Bootstrap : file input field ignores clicks when used in modal dialog