您好,这可能是一个菜鸟问题,但我似乎无法为以下用例找到合适的解决方案:
在后端,我们有 x 个跨虚拟机分布的服务,每个服务都提供相同的服务(分布式复制)。这些服务都在分布式事件总线(例如 Hazelcast)上监听。
当一个事件到达时,例如 GetDataA,EventBus 基础结构一次将该事件发送到每个后端服务。如果服务决定要处理该事件,它就会处理该事件,并通过 EventBus 将数据返回给事件的发布者。
一旦服务决定要处理事件,则 EventBus 应停止将该事件发送到其他监听器(服务),并继续路由下一个事件(即它应该是非阻塞的)
所以这个解决方案需要一种异步运行的请求/响应分布式事件架构。
有人知道这个领域有任何可扩展的解决方案吗?我研究过 Hazelcast,但事件机制意味着所有监听器都会收到事件。我查看了 Executor 服务,但这会将代码发送到其他节点,而我正在寻找的是另一个单个节点来处理请求。
最佳答案
您可以使用 Hazelcast IExecutorService 来完成此操作。对任务的发送方式有细粒度的控制
- 发送给所有成员
- 发送给部分成员
- 发送给任何成员(不关心是哪一个)
- 发送给特定成员
- 发送给拥有特定分区的成员。
还有一个使用 future 的选项,如果您不想阻塞,可以将 future 与异步回调机制结合起来。并且执行者不会向节点发送代码;代码(字节码)已经存在。所以你只是发送数据。
如果您不想通知所有人,而只想通知特定成员,则另一种选择是创建点对点解决方案。这可以使用 IQueue 来完成。
关于java - 分布式事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24182206/