Java ActiveMQ-创建队列/目标的最佳实践
在ActiveMQ中,我们是否应该为每种不同类型的事件创建单独的队列(目的地),以便让不同的使用者处理此类事件 或者我们应该发布一个泛型事件,然后在consumer中检查该事件以确定其类型并采取适当的操作 例如:如果有两个事件,Java ActiveMQ-创建队列/目标的最佳实践,java,jms,activemq,Java,Jms,Activemq,在ActiveMQ中,我们是否应该为每种不同类型的事件创建单独的队列(目的地),以便让不同的使用者处理此类事件 或者我们应该发布一个泛型事件,然后在consumer中检查该事件以确定其类型并采取适当的操作 例如:如果有两个事件,UserCreatedEvent和UserActivatedEvent,我们应该有一个队列user\u events\u q,还是应该有两个队列user\u created\u events\u q和user\u activated\u events\u q 有更多的队列
UserCreatedEvent
和UserActivatedEvent
,我们应该有一个队列user\u events\u q
,还是应该有两个队列user\u created\u events\u q
和user\u activated\u events\u q
有更多的队列有什么缺点吗?是否需要更多资源?这种情况下的典型做法是什么?肯定有多个队列会使用额外的资源,比如当对象放入队列时,它会保留在内存中(如果不使用持久队列),而且代理还需要为每个队列维护一些元数据,但这是一个可以承受的开销,因为为每个事件(在您的情况下)提供一个专用队列提供了极大的灵活性和可伸缩性。对于一个实例,引入一个新的事件,然后您可以简单地引入一个新的使用者从该队列中读取,而不考虑现有的实现。肯定有多个队列将使用额外的资源,就像当对象放入队列时,它将保留在内存中(如果不使用持久队列)代理还需要为每个队列维护一些元数据,但这是一个可以承受的开销,因为为每个事件(在您的情况下)提供一个专用队列提供了极大的灵活性和可伸缩性。例如,如果引入了一个新事件,那么您可以简单地引入一个新的使用者从该队列中读取,而不考虑现有的实现。您可能希望稍微限制队列的数量。也许可以保持在100左右。如果您使用Hawt.io或web控制台之类的工具,那么大量队列将无法正常工作。虽然理论上你可以使用大量的队列 单独队列的好部分是:
- 每个队列都有一个专用的死信队列
- 授权是“每个队列”
- 策略可以应用于队列级别,即最大内存、DLQ策略等
- 更简单的客户端代码
EventType='StockUpdate'
。这可能是减少队列数量的一种方法
另一种方法是使用主题层次结构。它不能精确地映射到队列,但可能是一个选项。假设您发布到不同的主题:
StockUpdates.Nasdaq.AAPL
或StockUpdates.DeutscheBorse.VOW3
因此,如果您只想订阅纳斯达克,请使用
StockUpdates.Nasdaq.>
或者如果您只想订阅大众汽车的股票更新,StockUpdates.DeutscheBorse.VOW3
,您可能想稍微限制排队的数量。也许可以保持在100左右。如果您使用Hawt.io或web控制台之类的工具,那么大量队列将无法正常工作。虽然理论上你可以使用大量的队列
单独队列的好部分是:
- 每个队列都有一个专用的死信队列
- 授权是“每个队列”
- 策略可以应用于队列级别,即最大内存、DLQ策略等
- 更简单的客户端代码
EventType='StockUpdate'
。这可能是减少队列数量的一种方法
另一种方法是使用主题层次结构。它不能精确地映射到队列,但可能是一个选项。假设您发布到不同的主题:
StockUpdates.Nasdaq.AAPL
或StockUpdates.DeutscheBorse.VOW3
因此,如果您只想订阅纳斯达克,请使用StockUpdates.Nasdaq.>
或者如果您只想订阅大众汽车股票更新,StockUpdates.DeutscheBorse.VOW3