我有一个消息代理,各个客户将在一天中连接很短的时间。
经纪人维护一个主题,它可以为数千件事物公布价格,但在任何特定时间,当前连接的客户端集只会对这些事物的一小部分感兴趣。
在紧密耦合的系统中,客户端会明确订阅特定内容,服务器会跟踪低级客户端连接/断开事件(自动取消订阅断开连接的客户端),并且只发布客户订阅的内容的价格。
在ActiveMQ等更松散耦合的消息传递系统中处理此类事情的最佳方法是什么?
在我的情况下,经纪人必须尽量减少它发布价格的事物的数量,因为它从第三方系统获得价格,该系统对在任何给定时间可以流式传输价格的事物数量施加严格限制
我的第一个倾向是不要试图跟踪低级事件,告诉当前连接的经纪人,而不是要求客户明确表示他们不再对特定商品的价格感兴趣。
相反,客户会定期宣布他们对一组给定物品的价格感兴趣。经纪人会为有兴趣的任何事情公布价格 - 最终停止公布没有客户宣布近期利益的事情的价格。
因此,与更紧密耦合的系统不同,客户往往不得不重新宣布他们对他们想要的价格的一系列事物的兴趣,但从不主动宣布利益的终结。
这类问题是否有更好或更标准/可接受的方法?
答案 0 :(得分:1)
你的制作人需要知道连接的消费者及其选择者(如果有的话),所以我认为:
1-他需要维护一个选择器列表以了解要发布的内容,因此您需要使用advisory-message http://activemq.apache.org/advisory-message.html
来维护此列表。AdvisorySupport.getConsumerAdvisoryTopic()
2-启动时的消费者向生产者发送消息,告知他们感兴趣的信息,如果你想要不同的目的地,可以使用哪个目的地,并通知取消订阅或停止兴趣。
3-简单地保持Fire-and-Forget EIP模式