java - RabbitMQ 异常:操作 queue.declare 导致服务器端出现通道异常 not_found
问题描述
我定义了两个队列 'request.queue' 和 'result.queue' ,我的 Web UI 在 'request.queue' 中生成消息,然后我的 python 应用程序从 'request.queue' 中使用它并开始处理,然后将结果推送到'result.queue' 和最终来自 'result.queue' 的结果像这个链接一样显示给用户。它在我的 ubuntu 20.4 的 labtop 中运行良好,但是当我将所有代码放入 ubuntu 20.4 操作系统的服务器中时,它不起作用并且只创建“request.queue”然后抛出异常:(“操作 queue.declare 导致通道异常 not_found: no queue 'result.queue' in vhost '/'" 和另一个日志:SimpleMessageListenerContainer:代理不可用;启动期间无法强制队列声明:java.net.ConnectException:
消费者引发异常,如果连接工厂支持,处理可以重新启动。异常总结:org.springframework.amqp.AmqpConnectException:java.net.ConnectException:连接被拒绝(连接被拒绝)
引起:com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#method<channel.close>(reply-code=404,reply-text=NOT_FOUND - vhost '/' 中没有队列 'result.queue',class-id=50,method-id=10)
服务器中的 RabbitMq 版本是 3.8.8,Erlang 的版本是 23.0.3。
任何人都可以帮助我为什么我在服务器上的代码抛出异常?
我的带有spring boot的用于声明队列的java代码在这里:
@Configuration
public class RequestConfiguration extends RabbitMqConfiguration {
@Value("${spring.rabbitmq.queue}")
String queueName;
@Value("${spring.rabbitmq.exchange}")
String exchange;
@Value("${spring.rabbitmq.routingkey}")
String routingkey;
@Bean
Queue queue() {
return new Queue(queueName, true);
}
@Bean
DirectExchange exchange() {
return new DirectExchange(exchange);
}
@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(routingkey);
}
@Bean
public MessageConverter jsonMessageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public AmqpTemplate rabbitTemplate() {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
rabbitTemplate.setMessageConverter(jsonMessageConverter());
return rabbitTemplate;
}
}
#And for consumer:
@Configuration
public class ResultConsumerConfiguration extends RabbitMqConfiguration {
@Value("${spring.rabbitmq.resultQueue}")
String resultQueueName;
@Value("${spring.rabbitmq.resultExchange}")
String exchange;
@Value("${spring.rabbitmq.resultRoutingkey}")
String routingkey;
@Bean
Queue queue() {
return new Queue(resultQueueName, true);
}
@Bean
DirectExchange exchange() {
return new DirectExchange(exchange);
}
@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(routingkey);
}
@Bean
public MessageConverter jsonMessageConverter() {
final Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
converter.setClassMapper(classMapper());
return converter;
}
@Bean
public DefaultClassMapper classMapper() {
DefaultClassMapper typeMapper = new DefaultClassMapper();
typeMapper.setDefaultType(ResultMessageGeneral.class);
return typeMapper;
}
@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setRoutingKey(this.resultQueueName);
template.setMessageConverter(jsonMessageConverter());
return template;
}
@Bean
public SimpleMessageListenerContainer listenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setQueueNames(this.resultQueueName);
container.setMessageListener(listenerAdapter());
return container;
}
@Bean
MessageListenerAdapter listenerAdapter() {
return new MessageListenerAdapter(rabbitMqListener, jsonMessageConverter());
}
}
解决方案
推荐阅读
- azure - 数据工厂 - 将多张工作表转换为 CSV 文件
- python - numpy 数组的精度更高
- git - 自动化 gitlab 更新从一个 gitlab 实例到另一个
- dpdk - 将 OVS-DPDK 与英特尔 SR-IOV 虚拟功能一起使用时出现问题
- html - HTML 宏?% 登录 URL 路径
- php - SQLSTATE[HY000] [2002] Connection denied (SQL: select * from sessions where id = RlKtbVl23GJ84G2vXmLdwp7KGokTyBD6QM0HlaBN limit 1)
- python - 使用 Dataset.map 时出现 RandomRotation 错误
- ruby-on-rails - 带有捆绑安装的 Docker 在我的 VPS 和 Mac 上的行为不同
- django - django 默认中的 OneToOne 字段
- c++ - 如何从 C:/ 驱动器获取所有文件路径?