我们有一个 Windows 服务,它监听单个 RabbitMQ 队列并处理消息。
我们希望扩展相同的 Windows 服务,以便它可以监听 RabbitMQ 的多个队列并处理消息。
不确定使用多线程是否可以实现这一点,因为每个线程都必须侦听(阻塞)队列。
由于我对多线程非常陌生,因此需要以下几点的高级指南,这将帮助我开始构建原型。
- 是否可以使用线程在单个应用程序中侦听多个队列?
- 如何处理单线程关闭的情况
down(由于异常等),如何在不重新启动的情况下恢复
整个Windows服务。
- 任何设计模式或开源实现都可以帮助我处理这种情况。
我喜欢你如何写你的问题——它一开始非常广泛,并且专注于细节。我已经成功地实现了非常类似的东西,目前正在开发一个开源项目,以吸取我的经验教训并将其回馈给社区。不幸的是,我还没有将我的代码整齐地打包起来,这对你没有多大帮助!不管怎样,回答你的问题:
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(使用前将#替换为@)