Vin*_*ren 5 messaging activemq-classic client-server stomp publish-subscribe
我有一个维护应用程序全局状态的服务器。
客户端可以连接到服务器并获取有关全局状态更改的消息(发布/订阅机制以便服务器广播信息)。
然而,在启动时,客户根本没有关于全局状态的信息,但他们需要这些信息。我想要的是对于任何订阅系统的新客户端,第一条通知消息是应用程序的完整状态。然后他们只收到有关此状态的更改:
这个想法类似于多人游戏,新玩家必须首先获得游戏的完整状态,然后仅发送游戏中的更改。
像 ActiveMQ 或 Stomp 这样的消息系统可以很好地满足我的需求,因为它们是多语言的,并且可以与多个传输层一起使用。然而,不存在发送完整状态(或以连贯方式累积最后更改)的概念。
当然,我可以轻松地以静态方式提供此状态(首先获得完整状态,然后订阅发布/订阅系统),但是我必须同时注意可能的更改(我是否丢失了一些更改)处理完整状态时?我刚刚检索到的全局状态中是否已考虑到此更改?...)。然而,我失去了 Stomp 和 ActiveMQ 已经提供的多语言/多传输方面。
是否有一些现有的库/工具可以做到这一点?ActiveMQ 的某种扩展?类似于 Stomp 的东西吗?还是需要手工制作?
这不是消息传递域问题,而是特定的用例。Pub/Sub 的设计初衷并不是为了了解有关生产者/消费者的任何状态信息,它只是代理消息。
也就是说,有一些不同的重新交付模式可以用来弥补一点差距(最后图像订阅策略等),但我会选择更简单的解决方案。另外,您可能会考虑使用Apache Camel之类的东西来介于生产者和订阅者之间,以提供这种额外的逻辑。
正如您所说,棘手的部分是保持增量更新与检索到的完整系统映像同步。从顶部开始,这就是我要做的......