【发布时间】:2014-02-18 01:52:38
【问题描述】:
我们有一个 Windows 服务,它监听单个 RabbitMQ 队列并处理消息。
我们希望扩展相同的 Windows 服务,以便它可以监听多个 RabbitMQ 队列并处理消息。
不确定是否可以通过使用多线程来实现,因为每个线程都必须监听(阻塞)队列。
由于我对多线程非常陌生,因此需要以下几点的高级指南,这将有助于我开始构建原型。
- 是否可以使用线程在单个应用程序中侦听多个队列?
- 单线程关闭时如何处理 down(由于异常等),如何在不重新启动的情况下恢复 整个 Windows 服务。
- 任何可以帮助我处理这种情况的设计模式或开源实现。
【问题讨论】:
-
@Noseratio - 不,我不是在询问单个消费者多队列。将有多个队列和多个队列,但应该使用单个 Windows 服务来实现。因此,我不想为每个队列消费者编写多个 Windows 服务,而是编写单个 Windows 服务来监听多个队列并处理消息。
-
我同意,这似乎不是重复的。
-
@Noseratio 对不起,如果我的写作不是很清楚。 侦听不同频道上的多个队列的单个 Windows 服务。换句话说,单个应用程序就像多个消费者(每个消费者将根据路由键绑定从其队列中获取消息)。如果我必须为每个消费者编写多个 Windows 服务将不会是一个具有挑战性的。由于线程方面的经验有限,我无法思考如何通过使用线程在单个应用程序中实现。我希望这个评论是有意义的。如果它仍然令人困惑,请告诉我,我会尝试进一步改进它。
-
EasyNetQ (easynetq.com) 是一个非常完整的用于 RabbitMQ 的开源高级 API,它开箱即用地进行线程管理、连接处理、错误处理等。
标签: c# multithreading rabbitmq