在ActiveMQ中,我们是否应该为每种不同类型的事件创建单独的队列(目标),以便我们可以让不同的消费者处理此类事件?
或者我们应该发布一个通用事件,然后检查消费者中的事件以确定其类型并采取适当的行动。
例如:如果有两个事件UserCreatedEvent
和UserActivatedEvent
,我们应该有一个队列user_events_q
,还是应该有两个队列user_created_events_q
和{{1 }}?
拥有更多队列有什么不利之处吗?它需要更多资源吗?在这种情况下,典型的做法是什么?
答案 0 :(得分:1)
肯定有多个队列将使用额外的资源,例如当对象被放入队列然后它保留在内存中(如果不使用持久队列)并且代理需要为每个队列维护一些元数据,但这是开销的可以忍受,因为为每个事件(在您的情况下)拥有一个专用队列提供了极大的灵活性和可扩展性。对于一个实例,引入了一个新事件,然后您可以简单地引入一个新的使用者来从该队列中读取,而不考虑现有的实现。
答案 1 :(得分:1)
您可能希望稍微限制队列数。也许保持低于100左右。如果您使用Hawt.io或Web控制台等工具 - 非常多的队列将无法正常工作。虽然理论上可以使用大量队列with some tweaking。
单独队列的好处是:
您可以使用selectors在共享队列上复用事件类型。某个客户端只会通过查看某个消息属性来接收所需的消息。即EventType = 'StockUpdate'
。这可能是减少队列数量的一种方法。
另一种方法是使用主题层次结构。它不会准确映射到队列,但可能是一个选项。假设您发布到不同的主题:
StockUpdates.Nasdaq.AAPL
或StockUpdates.DeutscheBorse.VOW3
。
因此,如果您只想订阅纳斯达克,请使用StockUpdates.Nasdaq.>
或者如果您只想要大众股票更新StockUpdates.DeutscheBorse.VOW3
。