集群中每个侦听器 运行 从主题仅使用一次消息
Consume message only once from Topic per listeners running in cluster
我正在实施领域事件基础设施,但该项目不允许任何消息传递基础设施(金融服务客户端),因此在 Hazelcast 主题和 ExecutorService 中找到了替代方案,
但问题是当 运行 在集群中时,消息将传递给将在集群中 运行 的侦听器,因此对于 2 个集群,我们有相同的侦听器 运行 在 2 jvm 中,消息消耗了两次并采取了行动,假设域事件应该执行一些非幂等操作,比如信用一些忠诚度积分,除非我明确地维护域事件的踪迹并在每次我检查时收到一个事件,我最终会记入它两次,"any suggestion implementing this without having to write those boiler plates possibly at the infralayer",或者是否有这种实现的已知模式。
编辑:同时我也在评估Hazelcast ExecutorService as suggested Here
您描述的用例可以通过使用 Hazelcast 的队列而不是主题来解决。使用主题的主要原因是如果您有兴趣让多个(可能是独立的)消费者获得相同的消息。您的要求听起来好像您感兴趣的是只有一个消费者收到消息,这就是队列的用途,请参阅 the Hazelcast documentation for Queues.
我正在实施领域事件基础设施,但该项目不允许任何消息传递基础设施(金融服务客户端),因此在 Hazelcast 主题和 ExecutorService 中找到了替代方案,
但问题是当 运行 在集群中时,消息将传递给将在集群中 运行 的侦听器,因此对于 2 个集群,我们有相同的侦听器 运行 在 2 jvm 中,消息消耗了两次并采取了行动,假设域事件应该执行一些非幂等操作,比如信用一些忠诚度积分,除非我明确地维护域事件的踪迹并在每次我检查时收到一个事件,我最终会记入它两次,"any suggestion implementing this without having to write those boiler plates possibly at the infralayer",或者是否有这种实现的已知模式。
编辑:同时我也在评估Hazelcast ExecutorService as suggested Here
您描述的用例可以通过使用 Hazelcast 的队列而不是主题来解决。使用主题的主要原因是如果您有兴趣让多个(可能是独立的)消费者获得相同的消息。您的要求听起来好像您感兴趣的是只有一个消费者收到消息,这就是队列的用途,请参阅 the Hazelcast documentation for Queues.