【问题标题】:ActiveMQ - Best practice for creating queues/destinationsActiveMQ - 创建队列/目的地的最佳实践
【发布时间】:2016-05-25 13:30:40
【问题描述】:

在 ActiveMQ 中,我们是否应该为每种不同类型的事件创建单独的队列(目标),以便我们可以让不同的消费者处理此类事件?

或者我们应该发布一个通用事件,然后在消费者中检查事件以确定其类型并采取适当的措施。

例如:如果有两个事件UserCreatedEventUserActivatedEvent,我们应该有一个队列user_events_q,还是应该有两个队列user_created_events_quser_activated_events_q

多排队有什么坏处吗?会需要更多资源吗?这种场景下的典型做法是什么?

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    您可能想在一定程度上限制队列的数量。也许保持在100左右。如果您使用 Hawt.io 或 Web 控制台之类的工具 - 大量队列将无法正常工作。虽然理论上你可以使用大量的队列也许with some tweaking

    独立队列的优点是:

    • 每个队列都有一个专用的死信队列
    • 授权是“每个队列”。
    • 策略可应用于队列级别 - 即最大内存、DLQ 策略等。
    • 更简单的客户端代码。

    您可以使用selectors 在共享队列上多路复用事件类型。某个客户端只会通过查看某些消息属性来接收它需要的消息。 IE。 EventType = 'StockUpdate'。这可能是减少队列数量的一种方法。

    另一种方法是使用主题层次结构。它不能准确地映射到队列,但可能是一个选项。假设您发布到不同的主题: StockUpdates.Nasdaq.AAPLStockUpdates.DeutscheBorse.VOW3

    因此,如果您只想订阅纳斯达克,请使用StockUpdates.Nasdaq.>,或者如果您只想订阅大众汽车股票更新,请使用StockUpdates.DeutscheBorse.VOW3

    【讨论】:

      【解决方案2】:

      肯定有多个队列会使用额外的资源,比如当对象被放入队列时,它会保留在内存中(如果不使用持久队列),并且代理需要为每个队列维护一些元数据,但这是开销之一可以忍受,因为每个事件(在您的情况下)都有一个专用队列提供了很大的灵活性和可扩展性。对于一个实例,引入了一个新事件,然后您可以简单地引入一个新的消费者来从该队列中读取,而将现有的实现放在一边。

      【讨论】:

        猜你喜欢
        • 2012-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        相关资源
        最近更新 更多