更好地按主题名称或字符串 属性 过滤 JMS 消息?
Better to filter JMS message by topic name or String Property?
在使用 Apache ActiveMQ Artemis 时,是首选具有用于区分它们的 String
属性的一个主题还是多个主题?例如,发布商是否应该这样做:
jmsTemplate.convertAndSend("quotes", quote, m -> {
m.setStringProperty("symbol", "MSFT");
return m;
});
还是这个?
jmsTemplate.convertAndSend("quotes.MSFT", quote, m -> {
m.setStringProperty("symbol", "MSFT");
return m;
});
请注意,我不能只做:
jmsTemplate.convertAndSend("quotes.MSFT", quote);
因为我需要符号 属性 作为 default-last-value-key
:
<address-setting match="quote.#">
<retroactive-message-count>100000</retroactive-message-count>
<default-last-value-key>symbol</default-last-value-key>
<default-non-destructive>true</default-non-destructive>
可能有 100,000 个符号。创建这么多 pub/sub 个主题会很糟糕吗?
大多数将没有订阅者,但会使用追溯地址保留最后一个值。我将在 Java 和 Python (STOMP) 中拥有消费者。
一般来说,ActiveMQ Artemis 并没有什么内在的东西必然会推动你这样或那样。
但是,您的 use-case 与 retroactive-address + LVQ 配置相当独特。我在这里使用单个地址的担心是,如果真的有 100,000 个符号并且每个符号的最后一个值应该保留,那么支持追溯地址的 ring-queue 可能需要 100,000 条消息深度,这意味着每次在该地址上创建一个订阅队列,然后代理将必须处理所有这些消息。我预计这将给经纪人带来沉重负担。
因此,在这一点上我认为每个符号的地址可能是最好的。那么 retroactive-message-count
可以是 1
.
最终,我最好的建议是使用 production-like 负载实际测试这两种不同的配置,然后选择在性能、可管理性等方面最适合您的 use-case 的配置。魔鬼总是在这种事情的细节中。在这样的背景下,有太多动人的部分和未说出口的要求,无法提供权威的建议。
在使用 Apache ActiveMQ Artemis 时,是首选具有用于区分它们的 String
属性的一个主题还是多个主题?例如,发布商是否应该这样做:
jmsTemplate.convertAndSend("quotes", quote, m -> {
m.setStringProperty("symbol", "MSFT");
return m;
});
还是这个?
jmsTemplate.convertAndSend("quotes.MSFT", quote, m -> {
m.setStringProperty("symbol", "MSFT");
return m;
});
请注意,我不能只做:
jmsTemplate.convertAndSend("quotes.MSFT", quote);
因为我需要符号 属性 作为 default-last-value-key
:
<address-setting match="quote.#">
<retroactive-message-count>100000</retroactive-message-count>
<default-last-value-key>symbol</default-last-value-key>
<default-non-destructive>true</default-non-destructive>
可能有 100,000 个符号。创建这么多 pub/sub 个主题会很糟糕吗?
大多数将没有订阅者,但会使用追溯地址保留最后一个值。我将在 Java 和 Python (STOMP) 中拥有消费者。
一般来说,ActiveMQ Artemis 并没有什么内在的东西必然会推动你这样或那样。
但是,您的 use-case 与 retroactive-address + LVQ 配置相当独特。我在这里使用单个地址的担心是,如果真的有 100,000 个符号并且每个符号的最后一个值应该保留,那么支持追溯地址的 ring-queue 可能需要 100,000 条消息深度,这意味着每次在该地址上创建一个订阅队列,然后代理将必须处理所有这些消息。我预计这将给经纪人带来沉重负担。
因此,在这一点上我认为每个符号的地址可能是最好的。那么 retroactive-message-count
可以是 1
.
最终,我最好的建议是使用 production-like 负载实际测试这两种不同的配置,然后选择在性能、可管理性等方面最适合您的 use-case 的配置。魔鬼总是在这种事情的细节中。在这样的背景下,有太多动人的部分和未说出口的要求,无法提供权威的建议。