再SpringBoot中使用MQ
1.创建SpringBoot项目
除了我们平常使用的一些工具依赖,还需要选择这个Spring for RabbitMQ依赖
2.需要在application.yml文件中进行配置
server:port :9090
spring:application:name:producerrabbitmq:host: 你的主机名port: 5672virtual-host: 虚拟主机名称username: adminpassword: admin123
3.测试使用
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;@RestController
public class TestController {@Resourceprivate TestService testService;@RequestMapping("test")public String test(String msg){testService.sendMsg(msg);return "success";}
}
@Service
public class TestService {@Resourceprivate AmqpTemplate amqpTemplate; // 注入RabbitMQ的模板对象,用于发送消息@Overridepublic 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 {@Resourceprivate 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注解将队列中的数据作为入参使用@RabbitHandlerpublic void receiveMsg(String msg) {System.out.println("接收Msg:" + msg);}// 另一个可能的消息接收方法,处理字节数组类型的数据//@RabbitHandler//public void receiveMsg(byte[] bs) {// // 处理字节数组的逻辑//}
}
此时就在SpringBoot中实现了生产者发送消息,然后消费者消费消息!!