我有以下一般问题:给定N个信息源,每个源有M种可能的信息类型,在ActiveMQ中处理主题层次结构的最有效方法是什么? 通常N可以是100s到10000s,而M应该是10。
选项1
有一个像
这样的层次结构和智能消费者(在应用程序方面)只是放弃了不需要的信息类型。
选项2
有一个像
这样的层次结构与愚蠢的消费者接受每条消息。
=================================
Option1可能允许更多的来源,但更多的工作在消费者方面(以及网络上的更多流量),而Option2应该在网络流量上更有效(并且希望性能)但是在代理资源上它可能更重消耗。
什么是最佳选择?
非常感谢
cghersi
答案 0 :(得分:0)
多个来源发布到同一主题没有任何问题。通常,将主题和队列保持在可管理的水平是一个好主意。
我会选择主题Type1,Type2,..,Type10
您可以使用字符串属性将元数据附加到已发布的消息以及其他信息。这样,消费者只能使用JMS selector订阅他们真正想要的数据,这些数据可能包括数据源,信息类型,日期,优先级等等。
MessageConsumer consumer = session.createConsumer(topic, "source = 'EU-market'");
如果主题有10次1000次,则每个客户端都必须打开多个主题的监听器才能获取所有信息。通常,侦听器需要需要大量堆栈分配的线程。最好让客户通过选择器来决定。
这不能回答主题的最大限制是什么的问题。主题和队列会增加代理的开销。它们被注册为JMX MBean并显示在Web控制台gui中。他们还可能分配内部线程和内存资源。要弄清楚一些主题是否有效 - 最好用运行它的设置来测试它。您的milage可能会有所不同