相关疑难解决方法(0)

Rabbit MQ - 恢复连接/通道/消费者

我正在创建一个以无限循环运行的消费者来读取队列中的消息.我正在寻找关于如何在我的无限循环中继续恢复abd的建议/示例代码,即使存在网络中断.消费者必须保持运行,因为它将作为WindowsService安装.

1)有人可以解释如何正确使用这些设置吗?他们之间有什么区别?

NetworkRecoveryInterval 
AutomaticRecoveryEnabled
RequestedHeartbeat
Run Code Online (Sandbox Code Playgroud)

2)请查看我当前的消费者示例代码.我使用的是.Net RabbitMQ Client v3.5.6.

以上设置如何为我"恢复"?例如,consumer.Queue.Dequeue阻止,直到它被恢复?这似乎不对......

我是否需要手动编写代码?例如,consumer.Queue.Dequeue抛出一个异常,我必须检测并手动重新创建我的连接,通道和消费者?或者只是消费者,因为"AutomaticRecovery"会为我恢复频道?

这是否意味着我应该在while循环中移动消费者创造?那么频道创作呢?和连接创建?

3)假设我必须手动执行一些恢复代码,是否有事件回调(以及如何注册它们)告诉我有网络问题?

谢谢!

public void StartConsumer(string queue)
{
            using (IModel channel = this.Connection.CreateModel())
            {
                var consumer = new QueueingBasicConsumer(channel);
                const bool noAck = false;
                channel.BasicConsume(queue, noAck, consumer);

                // do I need these conditions? or should I just do while(true)???
                while (channel.IsOpen &&        
                       Connection.IsOpen &&     
                       consumer.IsRunning)
                {
                    try
                    {
                        BasicDeliverEventArgs item;
                        if (consumer.Queue.Dequeue(Timeout, out item))
                        {
                            string message = System.Text.Encoding.UTF8.GetString(item.Body);
                            DoSomethingMethod(message);
                            channel.BasicAck(item.DeliveryTag, false);
                        }
                    }
                    catch (EndOfStreamException ex)
                    {   
                        // …
Run Code Online (Sandbox Code Playgroud)

c# rabbitmq

8
推荐指数
1
解决办法
9393
查看次数

标签 统计

c# ×1

rabbitmq ×1