.net EasyNetQ模型关机

.net EasyNetQ模型关机,.net,rabbitmq,easynetq,.net,Rabbitmq,Easynetq,我使用EasyNetQ实现了一个简单的RabbitMQ客户端。连接后,我收到一个通知“队列模型关闭”。这是我的密码: var _bus = RabbitHutch.CreateBus(String.Format("host={0}", hostName)).Advanced; var _exchange = Exchange.DeclareFanout(exName); var _queue = Queue.DeclareTransient(); _queue.BindTo(_exchange,

我使用EasyNetQ实现了一个简单的RabbitMQ客户端。连接后,我收到一个通知“队列模型关闭”。这是我的密码:

var _bus = RabbitHutch.CreateBus(String.Format("host={0}", hostName)).Advanced;
var _exchange = Exchange.DeclareFanout(exName);
var _queue = Queue.DeclareTransient();
_queue.BindTo(_exchange, "_");
_bus.Subscribe(
 _queue,
 (msg, properties, messageReceivedInfo) =>
 {
  return Task.Factory.StartNew(() =>
  {
   Console.WriteLine(msg.Length.ToString());
  });
 });
使用更低级的方法,一切都很好(消息长度显示在控制台中):

请提示,第一种方法出了什么问题

UPD 我发现IntelliTrace异常:

AMQP操作被中断:AMQP关闭原因,由启动 对等,代码=406,text=“前提条件\ u失败-无法重新声明交换 在vhost“/”中使用不同类型、耐用、内部或外部的“live” 自动删除值”,classId=40,methodId=10,原因=


Exchange设置相同(请参见上文)。那怎么了?

你是不是在订阅后很快就把你的_总线处理掉了?这将关闭订阅频道。

我遇到了相同的问题,直到我添加了在创建队列时已经设置的参数,如

var参数=新字典(2);
添加(“x-message-ttl”,900000);
添加(“x-死信交换”、“死信”);
this.requestMessageQueue=Queue.Declare(true、false、false,this.messageQueueConfiguration.RequestMessageQueueName,参数);
您可以检查通过RabbitMQ管理web界面设置的现有参数



由于,直接设置参数的唯一方法是通过,除非您仅使用每队列ttl(x-message-ttl)或expires(x-expires),在这种情况下,您可以使用。

否,我不会在订阅后处理_总线。我已尝试运行示例代码。当我处理_总线时,我只得到“队列的模型关闭”,否则它工作正常。我已更新了问题。您现在可以给我任何建议吗?问题与错误消息中所述完全相同。您正在使用不同的参数重新说明exchange。如果您首先删除现有exchange(清除所有内容(所有交换和队列)可能是一个好主意,它会正常工作。不幸的是,没有办法删除exchange(或更改服务器端的任何内容)。还有其他选择吗?如果我是对的,我会发现此错误,因为exchange是不持久的
var factory = new ConnectionFactory();
factory.HostName = hostName;
var connect = factory.CreateConnection();
var channel = connect.CreateModel();
channel.ExchangeDeclare(exName, "fanout");
var resultQueue = channel.QueueDeclare(string.Empty, false, true, false, null);
string queueName = resultQueue.QueueName;
var consumer = new QueueingBasicConsumer(channel);
channel.QueueBind(queueName, exName, string.Empty);
var resultConsume = channel.BasicConsume(queueName, false, consumer);
while(true)
{
 var e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
 Console.WriteLine(e.Body.Length.ToString());
 channel.BasicAck(e.DeliveryTag, false);
}
    var arguments = new Dictionary<string, object>( 2 );
    arguments.Add( "x-message-ttl", 900000 );
    arguments.Add( "x-dead-letter-exchange", "deadLetter" );
    this.requestMessageQueue = Queue.Declare( true, false, false, this.messageQueueConfiguration.RequestMessageQueueName, arguments );