有时我在我的日志文件中发现了以下条目。我不知道是什么问题。我猜是设置了一个较低的请求心跳。还有其他的想法吗?另外我有一个情况,在一个兔子重新启动我的服务器后,兔子回来后无法重新建立服务。我必须重新启动我的服务器,重新连接是可能的。
[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;
}
}
干杯,
丹尼斯
1条答案
按热度按时间ahy6op9u1#
vhost 'aaa'中没有交换'xxxx'
在您显示的配置中,我没有看到Exchange
xxxx
。也许你有一些伪造的代码发送到那个交易所?
编辑
如果它是一个引导应用程序,并且您使用的是amqp启动器,rabbit自动配置会为您创建一个管理员。在重新启动服务器后,您应该会看到类似这样的消息(如果您启用了DEBUG日志记录)...
管理员被注册为连接工厂的侦听器,并在建立连接时始终声明队列/交换/绑定。
您是否有多个连接工厂/虚拟主机?如果有,则每个连接工厂/虚拟主机都需要一个管理员-请参阅条件声明部分。