最近项目进度比较赶,可怜的老王一直在加班,好几天没更新,不能松懈。借着周末这个机会一起学习下MQ的相关知识。
本文主要内容为Springboot整合RabbitMQ的基本配置、测试实例。不深度涉及RabbitMQ的理论概念等知识,我也还在学习中。
更新日志:
2019-12-07 新建
2019-12-11 增加生产者和消费者确认模式
RabbitMQ介绍
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
RabbitMQ部署
我选择的是使用docker部署rabbitmq,如果有小伙伴还没有部署,可以点击我前面的文章,先部署MQ,再开始实例操作。
SpringBoot整合RabbitMQ实例
GitHub地址
https://github.com/oldwang666666/springboot-rabbitmq-demo
工程目录结构
新建maven工程,输入信息后,点击Finish
pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot.demo</groupId>
<artifactId>springboot-rabbitmq-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>consumer-service</module>
<module>provider-service</module>
</modules>
</project>
新建消息生产者provider-service工程
1、New Module,新建provider-service ,rabbitmq生产(提供)者
2、建好provider-service 后点击pom.xml文件,添加rabbitmq依赖,依赖只有一个,我就不贴出工程的所以依赖啦
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
3、配置application.properties,填上你的rabbitmq server ip和port,程序启动端口设置为8083
server.port=8083
#rabbitmq
spring.rabbitmq.host=your rabbimq server ip
spring.rabbitmq.port=your rabbimq server port
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#开启 confirm 确认机制
spring.rabbitmq.publisher-confirms=true
#开启 return 确认机制
spring.rabbitmq.publisher-returns=true
4、ProviderServiceApplication 可以使用@EnableRabbit开启注解模式。
5、新建一个消息发送控制类,我建了SendMessageController方便测试,小伙伴可以根据自己需要自己创建一个
package com.springboot.demo.provider.controller;
import com.springboot.demo.provider.service.SendMessageService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* rabbitmq生产控制层
* @Description
* @Author longzhang.wang
* @Since 1.0
* @Date 2019/12/3
*/
@RequestMapping("/rabbitmq")
@RestController
public class SendMessageController {
//使用RabbitTemplate,来发送消息
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
private SendMessageService sendMessageService;
/**
* @MethodName Default 默认交换机 demo
* @Description
* @Author longzhang.wang
* @Version V1.0.0
* @Since 2019/12/11
*/
@RequestMapping("/defaultSendMessage")
public String defaultSendMessage() {
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "Default 默认交换机 消息发送";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String,Object> map=new HashMap