如何在不同线程上响应事件

时间:2018-07-09 07:37:26

标签: c# multithreading rabbitmq

我已经实现了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 });                    
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

  

我正在其他线程上运行代码的队列轮询部分

据我所知,.NET客户端不支持此功能。


注意: RabbitMQ团队监视the rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。