我已经实现了RabbitMQ侦听器,该侦听器实际上只是处于循环中,等待消息到达。消息到达后,我希望触发一个事件并运行一些代码。
但是我似乎并不总是收到此事件,我想知道这是否是因为我正在不同线程上运行代码的队列轮询部分。
尽管它最初似乎确实可以工作,所以线程可能不是问题。谁能给我一个意见?
QueueListener:
http://localhost/GUI/1.html
消费阶层
public void CreateQueueListener<T>() where T : IPubSubEvent
{
var mqServer = new RabbitMqServer(m_RabbitMqAddress);
var mqClient = (RabbitMqQueueClient)mqServer.MessageFactory.CreateMessageQueueClient();
var channel = mqClient.Channel;
string queueName = mqClient.GetTempQueueName();
channel.QueueBind(queueName, m_EventExchange, routingKey: QueueNames<T>.In);
var consumer = new RabbitMqBasicConsumer(channel);
channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
Task.Run(() =>
{
while (true)
{
BasicGetResult basicGetResult;
try
{
basicGetResult = consumer.Queue.Dequeue();
}
catch (Exception ex)
{
throw;
}
var message = basicGetResult.ToMessage<T>();
PublishEvent?.Invoke(this, new PubSubEventArgs { EventData = message.GetBody().EventName });
}
});
}
答案 0 :(得分:0)
我正在其他线程上运行代码的队列轮询部分
据我所知,.NET客户端不支持此功能。
注意: RabbitMQ团队监视the rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。