当前位置: 首页 > 知识库问答 >
问题:

EasyNetQ模型关闭

邵轶
2023-03-14

我使用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());
  });
 });

使用更低级的方法,一切都很好(消息长度显示在控制台中):

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);
}

请提示,第一种方法有什么问题?

UPD I 捕获了异常与 IntelliTrace :

AMQP 操作已中断:AMQP 关闭原因,由 Peer 节点启动,代码=406,text=“PRECONDITION_FAILED - 无法在 vhost '/' 中以不同类型的、持久的、内部的或自动删除的值重新声明交换 'live'”, classId=40, methodId=10, cause=

交换设置是一样的(见上文)。那么怎么了?

共有2个答案

高高雅
2023-03-14

您是否在完成订阅后不久就处理您的_bus?这将关闭订阅频道。

郑星辰
2023-03-14

我也遇到了同样的问题,直到我添加了通过RabbitMQ Management Web界面创建队列时已经设置好的参数,正如迈克·哈洛所说。

    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 );

您可以检查通过RabbitMQ管理web界面设置的现有参数。

自从最近的代码更改以来,直接设置参数的唯一方法是通过管理API,除非您只使用每个队列ttl(x-mage-ttl)或过期(x-timeire),在这种情况下,您可以使用高级API。

 类似资料:
  • EasyNetQ 是 RabbitMQ 的 .NET 开发包。 示例代码: var bus = RabbitHutch.CreateRabbitBus("localhost");var message = new MyMessage {Text = "Hello!"};bus.Publish(message); 目标: 尽可能简化在.NET上使用RabbitMQ的工作。 要连接到RabbitMQ代

  • 我需要在使用EasyNetQ的微服务和使用Spring AMQP的之间发送消息。 问题在于properties消息,Spring Boot Amqp中的类型位于propertyheaders容器中,而在EasynetQ中,则来自名为的其他属性。 谁能告诉我,我需要定制什么,让Comunication他们以及?

  • 定义关联 关联在 Hyperf 模型类中以方法的形式呈现。如同 Hyperf 模型本身,关联也可以作为强大的 查询语句构造器 使用,提供了强大的链式调用和查询功能。例如,我们可以在 role 关联的链式调用中附加一个约束条件: $user->role()->where('level', 1)->get(); 一对一 一对一是最基本的关联关系。例如,一个 User 模型可能关联一个 Role 模型

  • 通过预先确定好模型之间的关系,在业务开发中,使用非常简便的写法,就可以实现复杂的涉及多表数据增删改查。 这一切都是模型底层实现帮你在处理,在 imi 中,模型的关联关系都使用注解来定义。 注解 这里列出定义模型关联关系所需的注解,所有关联模型的注解,命名空间为Imi\Model\Annotation\Relation @OneToOne 一对一关系声明 用法: @OneToOne("模型类名")

  • Creating model relations(创建模型之间的关系) model 关系概念 使用slc loopback:relation 关联选项 范围 属性 invertProperties ?? 逆属性(?) 自定义范围方法 通过REST API 暴露关联对象的方法 model 关系概念 在工作中单个 model 比较好理解, 但是现实使用中 model 之间往往存在着各种关联。 当你在实

  • 为了实现用户关注功能,首先要创建一个看上去并不是那么直观的数据模型。一开始我们可能会认为 has_many 关联能满足我们的要求:一个用户关注多个用户,而且也被多个用户关注。但实际上这种实现方式有问题,下面我们会学习如何使用 has_many :through 解决。 和之前一样,如果使用 Git,现在应该新建一个主题分支: $ git checkout master $ git checkout