Py学习  »  MQ

单个ActiveMQ会话上的多个使用者

egb mahajne • 5 年前 • 642 次点击  

我有一个Java应用程序,我需要一些帮助来验证我做了什么直到现在!. 该应用程序具有Quartz守护进程,配置为每200毫秒运行一次以轮询来自ActiveMQ队列的消息,每个消息的守护进程处理时间约为2-3分钟,当守护进程触发器触发时,另一个线程启动守护进程任务以轮询另一个消息并并行处理多达50个线程,所有线程e到ActiveMQ的相同连接和会话,在该连接和会话中使用默认值进行配置。 Prefetch 尺寸。

您认为这个实现有什么问题吗? 谢谢!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30867
 
642 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Justin Bertram
Reply   •   1 楼
Justin Bertram    5 年前

假设您喜欢当前的设计,并且只关心实现,那么在这里我看到的唯一关心的原因是任何可能的并发访问 javax.jms.Session . 这个 Session 不是线程安全的,因此不应同时被多个线程访问。一 javax.jms.Connection 是线程安全的,所以这不是一个问题。为每个消费者创建会话可能更安全/更简单。会话的重量非常轻,所以我不会期望任何真正的性能下降。

为了避免会话并发问题,您甚至可以考虑使用连接池(例如 PooledJMS 基于ActiveMQ的连接池实现)。

您的预取大小 可以 如果你开始遇到消费者饥饿问题,这是个问题,但是你没有指出你的信息量会是多少,所以很难说这是否会是个问题。要记住两件事:

  • 信息量越大,消费者就越不可能挨饿。
  • 消费者处理消息所花费的时间越长,其预取大小应越小。

相应地调整预取大小。

关于总体设计,我忍不住想 javax.jms.MessageListener 在这里实施会更好。单个messageListener可以获取消息并将其传递给线程进行处理。这将避免Quartz依赖和轮询。