rabbitmq 通道关闭:通道误差

jhkqcmku  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(212)

有时我在我的日志文件中发现了以下条目。我不知道是什么问题。我猜是设置了一个较低的请求心跳。还有其他的想法吗?另外我有一个情况,在一个兔子重新启动我的服务器后,兔子回来后无法重新建立服务。我必须重新启动我的服务器,重新连接是可能的。

[AMQP Connection xxx:5672] [ERROR] org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'xxxx' in vhost 'aaa', class-id=60, method-id=40)

交换和队列未自动删除?
公共类AmqpConfiguration {

@Autowired
private ConnectionFactory connectionFactory;  

@Bean
public Queue receiverQueue() {
    return new Queue("receiverQueue", true, false, false, getDeadLetterExchangeArgs());
}

@Bean
public FanoutExchange senderExchange() {
    return new FanoutExchange("xxxx");
}

@Bean
public Queue deadLetterQueue() {
    return new Queue("deadLetterQueue");
}

@Bean
public FanoutExchange exchangeDeadLetter() {
    return new FanoutExchange("deadLetter.exchange");
}

@Bean
public Binding bindDeadLetterQueueToExchange() {
    return BindingBuilder.bind(deadLetterQueue()).to(exchangeDeadLetter());
}

@Bean
public Binding bindSenderExchangeToQueue() {
    return BindingBuilder.bind(receiverQueue()).to(senderExchange());
}

@Bean(name = { "listenerContainerFactory" })
public SimpleRabbitListenerContainerFactory listenerContainerFactory() {
    final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory();
    containerFactory.setDefaultRequeueRejected(false);
    containerFactory.setConnectionFactory(connectionFactory);

    // TODO: set heartbeat

    return containerFactory;
}

private Map<String, Object> getDeadLetterExchangeArgs() {
    final Map<String, Object> args = new HashMap<String, Object>();
    args.put("x-dead-letter-exchange", amqpProperties.getDeadLetterExchange());
    return args;
}

}
干杯,
丹尼斯

ahy6op9u

ahy6op9u1#

vhost 'aaa'中没有交换'xxxx'
在您显示的配置中,我没有看到Exchange xxxx
也许你有一些伪造的代码发送到那个交易所?

编辑

如果它是一个引导应用程序,并且您使用的是amqp启动器,rabbit自动配置会为您创建一个管理员。在重新启动服务器后,您应该会看到类似这样的消息(如果您启用了DEBUG日志记录)...

09:43:03.450 [SimpleAsyncTaskExecutor-9] INFO  o.s.a.r.c.CachingConnectionFactory - Created new connection: SimpleConnection@b6e2e2c [delegate=amqp://guest@127.0.0.1:5672/]
09:43:03.451 [SimpleAsyncTaskExecutor-9] DEBUG o.s.amqp.rabbit.core.RabbitAdmin - Initializing declarations
09:43:03.451 [SimpleAsyncTaskExecutor-9] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'senderExchange'
09:43:03.451 [SimpleAsyncTaskExecutor-9] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'receiverQueue'
09:43:03.451 [SimpleAsyncTaskExecutor-9] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'bindSenderExchangeToQueue'
09:43:03.451 [SimpleAsyncTaskExecutor-9] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry'
09:43:03.452 [SimpleAsyncTaskExecutor-9] DEBUG o.s.a.r.c.CachingConnectionFactory - Creating cached Rabbit Channel from AMQChannel(amqp://guest@127.0.0.1:5672/,1)
09:43:03.452 [SimpleAsyncTaskExecutor-9] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://guest@127.0.0.1:5672/,1)
09:43:03.452 [SimpleAsyncTaskExecutor-9] DEBUG o.s.amqp.rabbit.core.RabbitAdmin - declaring Exchange 'xxxx'
09:43:03.452 [SimpleAsyncTaskExecutor-9] DEBUG o.s.amqp.rabbit.core.RabbitAdmin - declaring Queue 'receiverQueue'
09:43:03.453 [SimpleAsyncTaskExecutor-9] DEBUG o.s.amqp.rabbit.core.RabbitAdmin - Binding destination [receiverQueue (QUEUE)] to exchange [xxxx] with routing key []
09:43:03.453 [SimpleAsyncTaskExecutor-9] DEBUG o.s.amqp.rabbit.core.RabbitAdmin - Declarations finished

管理员被注册为连接工厂的侦听器,并在建立连接时始终声明队列/交换/绑定。
您是否有多个连接工厂/虚拟主机?如果有,则每个连接工厂/虚拟主机都需要一个管理员-请参阅条件声明部分。

相关问题