activemq多消费者多主题性能

activemq多消费者多主题性能,activemq,activemq-cpp,Activemq,Activemq Cpp,我对activemq比较陌生,我尝试做的第一件事就是从服务器进程发布到5000个主题(每个股票一个主题)。服务器和代理设法保持良好状态 然而,在消费者方面,这很奇怪。如果我使用一个通配符使用者(“mytopic.>”)订阅所有5k主题,那么一切都会正常进行。但是,如果我尝试订阅每个主题的单个消费者,性能就会下降,无法跟上 我尝试过使用预取限制和优化的确认模式,但似乎没有任何帮助。 你知道为什么一个通配符可以在5k个单独主题无法执行的情况下运行良好吗? 我也可以自己解复用MSG,但希望active

我对activemq比较陌生,我尝试做的第一件事就是从服务器进程发布到5000个主题(每个股票一个主题)。服务器和代理设法保持良好状态

然而,在消费者方面,这很奇怪。如果我使用一个通配符使用者(“mytopic.>”)订阅所有5k主题,那么一切都会正常进行。但是,如果我尝试订阅每个主题的单个消费者,性能就会下降,无法跟上

我尝试过使用预取限制和优化的确认模式,但似乎没有任何帮助。
你知道为什么一个通配符可以在5k个单独主题无法执行的情况下运行良好吗? 我也可以自己解复用MSG,但希望activemq能够尽可能高效地为我实现这一点

编辑:有关以下内容的更多信息和更新:

  • 我在每秒发布一次的6000个主题上测试了这个
  • 我正在使用ActudiMQ CPP C++库,我为所有主题创建了1个会话。事实证明,activemq实现的效率非常低,在向会话传递消息时,它会对每条消息上的所有主题进行线性扫描(实际上是两次)
  • 更糟糕的是,如果您为每个主题创建一个会话,那么它会尝试为每个会话创建一个线程,这样会很快爆发
  • 但是等等!连接上有一个选项,setAlwaysSessionAsync,因此会话不会创建自己的线程,太好了
  • 哦!不是那么快,会话仍然在非异步模式下创建一些RW互斥,并且它们使用一些自行生成的TLS数据,这些数据的硬编码限制为每个线程约300个实例。。。啊
  • 好的,所以我必须将我可以创建的会话数量限制在150个左右(我猜其他对象也在使用TLS数据),然后在这些会话上循环我的主题
  • 如果我能控制有多少线程可以在线处理数据,那就太好了,但遗憾的是,这也没有公开。。。。呃,用activemq cpp代码硬编码

TLDR;activemq是一堆乱七八糟的poo

每个消费者都使用自己的连接还是设置了池或类似的连接?您可能需要提供一些更详细的信息,如卷,客户机是否持久,以便人们能够更好地帮助每个消费者使用其自己的连接,或者您是否设置了池或类似功能?您可能需要提供一些更详细的信息,如卷,客户机是否持久,以便人们能够更好地提供帮助