Springboot整合rabbitMQ
一、准备环节
确保rabbitmq服务运行正常,安装请查找rabbitmq安装教程
确保springboot运行正常,so easy 不多介绍
二、集成rabbitMQ
1、生产者和消费者共同的
pom导入rabbitMQ所依赖的包
<!-- 添加springboot对amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!—传输对象要用fastjons--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.38</version> </dependency> |
在application.properties配置文件中加入mq的设置
spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest |
加入配置java文件
package com.zx.springboot.config;
import org.springframework.amqp.core.Queue; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
/*** * Rabbitmq的springboot配置 * @author Administrator * */ @Configuration public class RabbitmqConfig {
/*** * 直连消息队列 key名称 */ public static final String QUEUE = "queue_id_hello";
/** * Direct模式 消息队列 * @return */ @Bean public Queue directQueue() { // 第一个参数是队列名字, 第二个参数是指是否持久化 return new Queue(QUEUE, true); }
/*** * JSON格式传输 * @return */ @Bean public Jackson2JsonMessageConverter producerJackson2MessageConverter() { return new Jackson2JsonMessageConverter(); } }
|
2、生产者的
生产者的消息生产者或提供者
package com.zx.springboot.producer;
import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;
import com.zx.springboot.config.RabbitmqConfig;
/*** * 消息队列生产者 * * @author Administrator * */ @Component public class MessegeProducer {
/*** * 发送消息到直连队列 */ @Autowired private AmqpTemplate amqpTemplate;
public void sendDirectQueue(Object jsonStr) { // 第一个参数是指要发送到哪个队列里面, 第二个参数是指要发送的内容 this.amqpTemplate.convertAndSend(RabbitmqConfig.QUEUE, jsonStr); }
}
|
生产者调用消息服务
package com.zx.springboot.controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;
import com.zx.springboot.pojo.User; import com.zx.springboot.producer.MessegeProducer;
@Controller public class HelloController {
@Autowired MessegeProducer messegeProducer;
@RequestMapping("/hello/{name}") @ResponseBody public String hello(@PathVariable(value = "name") String name){ User user = new User(); user.setId(1); user.setName(name); System.out.println("producer-9000:"+user); messegeProducer.sendDirectQueue(user); return name; } }
|
2、消费者的
消费者处理消息
package com.zx.springboot.controller;
import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.zx.springboot.config.RabbitmqConfig; import com.zx.springboot.pojo.User;
/*** * 消费者1,消费指定队列 * @author Administrator */ @Component public class MessegeConsumer { // queues是指要监听的队列的名字 @RabbitListener(queues = RabbitmqConfig.QUEUE) public void receiverDirectQueue(Message msg) { User user = new User(); if(null!=msg) { String info = new String(msg.getBody()); user = JSON.parseObject(info, User.class); } System.out.println("consumer-9001-"+user); } }
|
三、测试集成rabbitMQ
访问地址:127.0.0.1:9000/hello/zx123
|
控制台打印出消费者接受到的消息
|
如果停止消费者服务,有一条消息在停留在rabbitmq服务中
|