再SpringBoot中使用MQ
1.创建SpringBoot项目
除了我们平常使用的一些工具依赖,还需要选择这个Spring for RabbitMQ依赖
2.需要在application.yml文件中进行配置
server:
port :9090
spring:
application:
name:producer
rabbitmq:
host: 你的主机名
port: 5672
virtual-host: 虚拟主机名称
username: admin
password: admin123
3.测试使用
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class TestController {
@Resource
private TestService testService;
@RequestMapping("test")
public String test(String msg){
testService.sendMsg(msg);
return "success";
}
}
@Service
public class TestService {
@Resource
private AmqpTemplate amqpTemplate; // 注入RabbitMQ的模板对象,用于发送消息
@Override
public void sendMsg(String msg) {
// 发送消息到队列
amqpTemplate.convertAndSend("queue1", msg);
// 发送消息到交换机(订阅交换机,第二个参数为空)
amqpTemplate.convertAndSend("wx1", "", msg);
// 发送消息到交换机(路由交换机,第二个参数为路由key)
amqpTemplate.convertAndSend("wx2", "a", msg);
}
}
完善一下测试使用类
import javax.annotation.Resource;
@Service
public class TestService {
@Resource
private AmqpTemplate amqpTemplate;
public void sendMsg(String msg) {
if (msg.startsWith("q_")) {
// 发送消息到队列
amqpTemplate.convertAndSend("queue1", msg);
} else if (msg.startsWith("f_")) {
// 发送消息到交换机(订阅交换机)
amqpTemplate.convertAndSend("ex1", "", msg);
} else if (msg.startsWith("r_")) {
// 发送消息到交换机(路由交换机)
if (msg.startsWith("r_a")) {
amqpTemplate.convertAndSend("ex2", "a", msg);
} else if (msg.startsWith("r_b")) {
amqpTemplate.convertAndSend("ex2", "b", msg);
}
}
}
}
此时从浏览器发送请求:localhost:9090/test?msg=....就可以发送消息到队列中
4.然后创建消费者项目
前期步骤一致,只是配置文件的端口号进行变更
package com.qfedu.consumer.service;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
//@RabbitListener(queues ={"queue1","queue2"})
// 首先通过RabbitListener注解监听队列
@RabbitListener(queues = "queue1")
public class ReceiveMsgService {
// 然后通过RabbitHandler注解将队列中的数据作为入参使用
@RabbitHandler
public void receiveMsg(String msg) {
System.out.println("接收Msg:" + msg);
}
// 另一个可能的消息接收方法,处理字节数组类型的数据
//@RabbitHandler
//public void receiveMsg(byte[] bs) {
// // 处理字节数组的逻辑
//}
}
此时就在SpringBoot中实现了生产者发送消息,然后消费者消费消息!!