引入 ampq 场景启动器 RabbitAutoConfiguration 自动生效
<!--引入 amqp 场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2-RabbitAutoConfiguration 给容器中自动配置了
* RabbitTemplate、AmqpAdmin、CachingConnectionFactory、RabbitMessagingTemplate 等组件
3- @EnableRabbit 开启rabbit
属性配置
在RabbitProperties 定义
# RabbitMQ配置
spring.rabbitmq.host=192.168.1.152
spring.rabbitmq.port=5672
# 虚拟主机配置
spring.rabbitmq.virtual-host=/
# 开启发送端消息抵达Broker确认
spring.rabbitmq.publisher-confirms=true
# 开启发送端消息抵达Queue确认
spring.rabbitmq.publisher-returns=true
# 只要消息抵达Queue,就会异步发送优先回调returnfirm
spring.rabbitmq.template.mandatory=true
# 手动ack消息,不使用默认的消费端确认
spring.rabbitmq.listener.simple.acknowledge-mode=manual
3-测试类
创建交换机 创建对接 绑定交换机 以及发送消息
/**
* <简述>创建交换机
* <详细描述> 1、如何创建Exchange、Queue、Binding
* * 1)、使用AmqpAdmin进行创建交换机
* * 2、如何收发消息
* @author syf
* @date 2023/1/12 17:02
*/
@Test
public void createExchange() {
//名称 , 是否持久化(关机是否删除),是否自动删除
Exchange directExchange = new DirectExchange("hello-java-exchange",true,false);
//声明一个交换机
amqpAdmin.declareExchange(directExchange);
log.info("Exchange[{}]创建成功:","hello-java-exchange");
}
/**
* <简述>创建队列
* <详细描述>
* @author syf
* @date 2023/1/12 17:06
*/
@Test
public void testCreateQueue() {
//名称,是否持久化,是否排他(排他 不允许其他连接,是否自动删除
Queue queue = new Queue("hello-java-queue",true,false,false);
amqpAdmin.declareQueue(queue);
log.info("Queue[{}]创建成功:","hello-java-queue");
}
/**
* <简述>交换机和队列绑定
* <详细描述>
* @author syf
* @date 2023/1/12 17:09
*/
@Test
public void createBinding() {
Binding binding = new Binding(
"hello-java-queue", //目的地 队列
Binding.DestinationType.QUEUE, //目的地类型 绑定类型 (1- 交换机绑定队列 2-交换机绑定交换机)
"hello-java-exchange",//交换机
"hello.java",//路由键
null);
amqpAdmin.declareBinding(binding);
log.info("Binding[{}]创建成功:","hello-java-binding");
}
/**
* <简述>发送消息
* <详细描述>
* @author syf
* @date 2023/1/12 17:13
*/
@Test
public void sendMessageTest() {
OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity();
reasonEntity.setId(1L);
reasonEntity.setCreateTime(new Date());
reasonEntity.setName("reason");
reasonEntity.setStatus(1);
reasonEntity.setSort(2);
String msg = "Hello World";
//1、发送消息,如果发送的消息是个对象,会使用序列化机制,将对象写出去,对象必须实现Serializable接口
//2、发送的对象类型的消息,可以是一个json
rabbitTemplate.convertAndSend("hello-java-exchange","hello2.java",
reasonEntity,new CorrelationData(UUID.randomUUID().toString()));
log.info("消息发送完成:{}",reasonEntity);
}
4-序列化发送对象为json ,默认实现是序列化
5-RabbitListener&RabbitHandler
发送信息
@RabbitListener 标注在类上 监听队列
@RabbitHandler 标注处理的方法