版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mrqiang9001/article/details/86659220
文章目录
1 摘要
RabbitMQ 是一款应用广泛、易开发部署的开源消息队列框架,主要用于解决分布式系统中的并发操作。本文将介绍如何在 spring boot 中简易集成 RabbitMQ.
RabbitMQ 官方文档: https://www.rabbitmq.com/documentation.html
2 安装 RabbitMQ 客户端
RabbitMQ 服务是需要在服务器上边安装客户端的,如果没有安装,将无法使用 RabbitMQ
centOS 7 系统: centOS 7 安装 RabbitMQ 教程
Windows 系统: Installing on Windows
macOS 系统: The Homebrew RabbitMQ Formula
3 Maven 依赖
核心 Maven 依赖
../pom.xml
<!-- rabbitmq 消息队列 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>${springboot.version}</version>
</dependency>
其中 ${springboot.version}
为项目的 springboot 版本,本示例中的版本为:
<springboot.version>2.0.6.RELEASE</springboot.version>
4 配置 RabbitMQ
../demo-web/src/main/resources/application-dev.ym
RabbitMQ 类似于 Redis ,不同的软件环境,可能需要不同的配置,这里以 dev
环境为例
spring:
# rabbitmq
rabbitmq:
host: 192.168.100.100
port: 5672
username: rabbitmqadmin
password: rootpass100
RabbitMQ 属性配置类
../demo-common/src/main/java/com/ljq/demo/springboot/common/config/RabbitMQConfig.java
package com.ljq.demo.springboot.common.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: tabbitmq 配置信息
* @Author: junqiang.lu
* @Date: 2019/1/21
*/
@Configuration
public class RabbitMQConfig {
public static final String QUEUE_NAME_DEMO = "rabbitmq_spring_boot_demo";
@Bean
public Queue queue(){
return new Queue(QUEUE_NAME_DEMO);
}
}
4 RabbitMQ 消息生产者、消费者
RabbitMQ 消息生产者
../demo-common/src/main/java/com/ljq/demo/springboot/common/rabbitmq/RabbitMQSender.java
package com.ljq.demo.springboot.common.rabbitmq;
import com.ljq.demo.springboot.common.config.RabbitMQConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description: rabbitMQ 消息发送者
* @Author: junqiang.lu
* @Date: 2019/1/21
*/
@Service
public class RabbitMQSender {
private static final Logger logger = LoggerFactory.getLogger(RabbitMQSender.class);
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(){
logger.info("sent by RabbitMQ ... ...");
rabbitTemplate.convertAndSend(RabbitMQConfig.QUEUE_NAME_DEMO, "Hello world ---RabbitMQ demo");
}
}
RabbitMQ 消息消费者
../demo-common/src/main/java/com/ljq/demo/springboot/common/rabbitmq/RabbitMQReceiver.java
package com.ljq.demo.springboot.common.rabbitmq;
import com.ljq.demo.springboot.common.config.RabbitMQConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @Description: RabbitMQ 消息队列消费者
* @Author: junqiang.lu
* @Date: 2019/1/21
*/
@Service
public class RabbitMQReceiver {
private static final Logger logger = LoggerFactory.getLogger(RabbitMQReceiver.class);
@Autowired
private AmqpTemplate rabbitTemplate;
@RabbitListener(queues = RabbitMQConfig.QUEUE_NAME_DEMO)
public void receive(String message){
logger.info("Received < {} >", message);
}
}
5 调用 RabbitMQ
../demo-web/src/main/java/com/ljq/demo/springboot/web/controller/RabbitMQController.java
package com.ljq.demo.springboot.web.controller;
import com.ljq.demo.springboot.common.api.ApiResult;
import com.ljq.demo.springboot.common.rabbitmq.RabbitMQSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* @Description: RabbitMQ 消息队列测试 controller
* @Author: junqiang.lu
* @Date: 2019/1/21
*/
@RestController
@RequestMapping(value = "api/demo/rabbitmq")
public class RabbitMQController {
@Autowired
private RabbitMQSender rabbitMQSender;
@RequestMapping(value = "send", method = {RequestMethod.GET, RequestMethod.POST})
public ApiResult send(){
rabbitMQSender.send();
return ApiResult.success();
}
}
6 测试结果
本地测试接口地址:
http://127.0.0.1:8088/api/demo/rabbitmq/send
测试日志:
2019-01-26 17:09:14:559 [http-nio-8088-exec-3] INFO com.ljq.demo.springboot.web.acpect.LogAspect(LogAspect.java 66) -[AOP-LOG-START]
requestMark: f49beb97-311c-4220-807f-806b0dd8353e
requestIP: 127.0.0.1
contentType:null
requestUrl: http://127.0.0.1:8088/api/demo/rabbitmq/send
requestMethod: GET
requestParams: null
targetClassAndMethod: com.ljq.demo.springboot.web.controller.RabbitMQController#send
2019-01-26 17:09:14:561 [http-nio-8088-exec-3] INFO c.l.demo.springboot.common.rabbitmq.RabbitMQSender(RabbitMQSender.java 24) -sent by RabbitMQ ... ...
2019-01-26 17:09:14:569 [http-nio-8088-exec-3] INFO com.ljq.demo.springboot.web.acpect.LogAspect(LogAspect.java 74) -[AOP-LOG-END]
ApiResult(code=1000, msg=成功, data=null)
2019-01-26 17:09:14:576 [SimpleAsyncTaskExecutor-1] INFO c.l.d.springboot.common.rabbitmq.RabbitMQReceiver(RabbitMQReceiver.java 26) -Received < Hello world ---RabbitMQ demo >
7 参考资料推荐
Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ
Gtihub 源码地址 : https://github.com/Flying9001/springBootDemo
个人公众号:404Code,分享半个互联网人的技术与思考,感兴趣的可以关注.