基于多线程的 RabbitMQ 消费者

2024-05-10

我们有一个 Windows 服务,它监听单个 RabbitMQ 队列并处理消息。

我们希望扩展相同的 Windows 服务,以便它可以监听 RabbitMQ 的多个队列并处理消息。

不确定使用多线程是否可以实现这一点,因为每个线程都必须侦听(阻塞)队列。

由于我对多线程非常陌生,因此需要以下几点的高级指南,这将帮助我开始构建原型。

  1. 是否可以使用线程在单个应用程序中侦听多个队列?
  2. 如何处理单线程关闭的情况 down(由于异常等),如何在不重新启动的情况下恢复 整个Windows服务。
  3. 任何设计模式或开源实现都可以帮助我处理这种情况。

我喜欢你如何写你的问题——它一开始非常广泛,并且专注于细节。我已经成功地实现了非常类似的东西,目前正在开发一个开源项目,以吸取我的经验教训并将其回馈给社区。不幸的是,我还没有将我的代码整齐地打包起来,这对你没有多大帮助!不管怎样,回答你的问题:

1. Is it possible to use threading for multiple queues.

答:是的,但它可能充满陷阱。也就是说,RabbitMQ .NET 库并不是目前写得最好的代码,而且我发现它是 AMQP 协议的相对麻烦的实现。最有害的警告之一是它如何处理“接收”或“消费”行为,如果你不小心,这很容易导致死锁。幸运的是,API 文档对此进行了详细说明。Advice- 如果可以的话,使用单例连接对象。然后,在每个线程中,使用该连接创建一个新的IModel以及相应的消费者。

2. How to gracefully handle exceptions in threads- 我相信这是另一个主题,我不会在这里讨论它,因为您可以使用多种方法。

3. Any open-source projects?- 我喜欢背后的想法EasyNetQ http://easynetq.com/,尽管我最终还是自己推出了。我希望在我的开源项目完成后记得跟进,因为我相信这是比 EasyNetQ 更好的改进。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于多线程的 RabbitMQ 消费者 的相关文章

随机推荐