依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1.配置文件
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.queue=test_queue
spring.rabbitmq.exchange=test_exchange
spring.rabbitmq.routingkey=test_routingkey
2.配置类
@Value("${spring.rabbitmq.queue}")
private String queue_name_driect;
@Value("${spring.rabbitmq.exchange}")
private String exchange_name;
@Value("${spring.rabbitmq.routingkey}")
private String routingkey_direct;
/*
* 得到交换机*/
@Bean
public TopicExchange topictExchange() {
return new TopicExchange(exchange_name);
}
/*
* 得到队列*/
@Bean("DriectQueue")
public Queue queueDriect() {
return new Queue(queue_name_driect, true, false, false, null);
}
/*
* 绑定交换机和队列*/
@Bean("DriectBinding")
public Binding bindingExchangeQueueDriect(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(routingkey_direct);
}
3.消费者
@Component
public class MessageConsumer {
private static final Logger LOG = LoggerFactory.getLogger(MessageConsumer.class);
@RabbitListener(queues = "${spring.rabbitmq.queue}")
public void getMsg(String msg) {
LOG.info(msg);
}
}
4.生产者
@Component
public class MsgSender {
@Autowired
private AmqpTemplate rabbitTemplate;
@Value("${spring.rabbitmq.exchange}")
private String exchange;
@Value("${spring.rabbitmq.routingkey}")
private String routingkey;
public void send(String msg) {
this.rabbitTemplate.convertAndSend(exchange, routingkey, msg);
}
}
问题:
1、406错误
解决:在控制页面查看交换机或队列的参数是否和代码中设置的一致,例如durable、type等
2、406错误,在项目启动时间隔着报出
解决:查看mq集群节点是否都正常,假设有两个节点,一个节点停止运行,则启动时会出现第一次启动报错,第二次启动正常,循环交替进行