首页 > 解决方案 > 为什么我在尝试访问 RabbitMQ 中的 URL 时会出现 Channel 错误?

问题描述

我是 RabbitMQ 的新手,我正面临通道错误。我的程序非常简单明了:

配置文件:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
javainuse.rabbitmq.exchange=javainuse.exchange
javainuse.rabbitmq.queue=javainuse.queue
javainuse.rabbitmq.routingkey=javainuse.routingkey
server.port=8081

下面是类RabbitMQConfig.java。此类包含以下 bean :QueueDirectExchange和.BindingMessageConverter

@Configuration
public class RabbitMQConfig {
    
    @Bean("myTemplate")
    public AmqpTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        final RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jsonMessageConverter());
        return rabbitTemplate; 
    }
}

下面是类RabbitMQSender.java。它调用myTemplate以将消息发送到队列。

@Service
public class RabbitMQSender {
        
    public void send(Person person) {
        rabbitTemplate.convertAndSend(exchange, routingkey, person);
        System.out.println("Send msg = " + person);
    }
}

下面是控制器,即RabbitController.java。这是我项目中唯一的控制器。

public class RabbitController {
        
    @GetMapping(value = "/producer")
    public String producer(@RequestParam("empName") String empName, @RequestParam("empId") String empId) {
        
        person.setName(empName);
        person.setId(empId);
        rabbitMQSender.send(person);
        
        return "Message sent to the RabbitMQ JavaInUse Successfully";
    }
}

我有一个 Pojo,即只有两个变量 id 和 name 的 Person。但是,当我尝试点击以下 URL 时,会创建队列:

http://localhost:8081/javainuse-rabbitmq/producer?empName=Ria&empId=emp003

日志输出

我相信这是一个愚蠢的错误。请帮我解决这个问题。

标签: javaspring-bootrabbitmq

解决方案


我相信您已经像这样定义了您的Exchange bean:

@Bean
public DirectExchange exchange(@Value("{javainuse.rabbitmq.exchange}") String exchangeName) {
    // ...
}

您错过了$登录@Value。尝试像这样定义bean:

@Bean
public DirectExchange exchange(@Value("${javainuse.rabbitmq.exchange}") String exchangeName) {
    // ...
}

推荐阅读