有道无术,术尚可求,有术无道,止于术。
Spring Boot
为RabbitMQ
也提供了自动配置和启动器。
创建一个 Spring Boot
基础工程,引入依赖:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-amqpartifactId>
dependency>
该依赖中,引入了spring-rabbit
:
在RabbitProperties
配置类中,可以看到很多相关配置:
最重要当然是配置MQ 的地址、端口、用户名、密码,可以使用两种方式配置:
spring:
rabbitmq:
addresses: amqp://guest:guest@localhost
port: 5672
# 或者
spring:
rabbitmq:
username: guest
password: guest
host: localhost
port: 5672
虚拟机配置,虚拟机以/
开头,默认为/
:
spring:
rabbitmq:
virtual-host: /
使用ExchangeBuilder
创建交换机,可以创建四种类型的交换机,如下图:
按照相似的方式创建队列、绑定。
@Configuration
public class RabbitMqConfig {
/**
* 使用 ExchangeBuilder 创建交换机
*
*/
@Bean("bootExchange")
public Exchange bootExchange() {
return ExchangeBuilder.directExchange("bootExchange").durable(true).build();
}
/**
* 创建队列
*/
@Bean("bootQueue")
public Queue bootQueue() {
return QueueBuilder.durable("bootQueue").build();
}
/**
* 创建队列和交换机的绑定关系
*/
@Bean("bootBinding")
public Binding bootBinding(@Qualifier("bootQueue") Queue bootQueue, @Qualifier("bootExchange") Exchange bootExchange) {
return BindingBuilder.bind(bootQueue).to(bootExchange).with("boot.key").and(null);
}
}
启动项目,进入控制台,可以看到相关信息:
使用@RabbitListener
注解标记在方法上,并指定队列名,方法入参Message
:
@Component
public class RabbitConsumer {
@RabbitListener(queues = {"bootQueue"})
public void rabbitListener(Message message) {
System.out.println("收到消息===" + message);
}
}
Message
对象是Sring
集成RabbirMQ
提供的消息装载体,主要包含了消息二进制数据body
和消息属性MessageProperties
:
创建一个生产者,使用RabbitTemplate
直接将消息发送到指定的交换机,并指定其路由KEY
@SpringBootTest
public class MqTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testRabbitPub() {
rabbitTemplate.convertAndSend("bootExchange","boot.key","HELLO SPRING BOOT");
}
}
启动项目,可以看到打印了连接日志:
发送消息,并成功接收到消息,消息包含了消息本身内容和消息属性: