【发布时间】:2017-05-09 21:08:02
【问题描述】:
我正在尝试使用 Windows 服务从 RabbitMQ 读取新消息,但没有触发接收新消息的事件。该服务可以作为调试模式下的控制台应用程序启动。在这种情况下,事件触发,我可以阅读新消息。 该服务由我用来登录 Windows 的用户启动。 这是 OnStart 服务事件处理程序中的一部分代码
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var conn = factory.CreateConnection())
{
using (var channel = conn.CreateModel())
{
channel.ExchangeDeclare("sm_posts", "fanout");
var argu = new Dictionary<string, object>();
argu.Add("x-max-length", 10000);
var consumerQueue = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: consumerQueue, exchange: "sm_posts", routingKey: "");
var consumer = new EventingBasicConsumer(channel);
log.Info("Waiting for new messages...");
consumer.Received += (model, ea) =>
{
count++;
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
log.Info(message + "\n\n\n\n\n");
为什么 windows 服务不接收消息,而在调试模式下作为控制台应用程序启动时却接收消息?
【问题讨论】:
-
将用户帐户更改为网络服务之一或创建一个具有管理员权限的帐户,可以从队列中读取。
-
@t0mm13b 感谢您的回复。如果我尝试使用网络服务启动服务,则会出现错误。如何创建一个可以从队列中读取的帐户?
-
查看 rabbitmq 日志文件 - 在您启动服务时是否有连接尝试?
-
@Alex Buyny 我从 C:\Users\Administrator\AppData\Roaming\RabbitMQ\log 文件夹中删除了日志。重新启动了服务。并且日志目录仍然是空的。我还在我的 Windows 服务程序日志中看到调用了该方法(其中声明了队列并绑定到交换)
标签: c# windows-services rabbitmq