Spring Boot 集成 RabbitMQ 实战
Spring Boot 集成 RabbitMQ 实战
特别说明:
本文主要参考了程序员 DD 的博客文章《Spring Boot中使用RabbitMQ》,在此向原作者表示感谢。
Mac 上 RabbitMQ 的安装

这样子安装的话,RabbitMQ 的脚本是安装到 /usr/local/sbin 这个目录里的,并且不会自动添加到你的 PATH 里,所以要先添加下。
PATH=$PATH:/usr/local/sbin
export PATH=/usr/local/bin:/usr/local/sbin:${PATH}
补充说明:sublime .zshrc ,.zshrc 这个文件可以配置环境变量。
启动命令
rabbitmq-server
我们将会看到:

在浏览器中输入 http://localhost:15672/,用户名和密码都是 guest 。
Spring Boot 集成 RabbitMQ 实战
下面我们使用 Spring Boot 集成 RabbitMQ 模块,初步体验一下 MQ。以下的例子只是一个 HelloWorld ,让我们简单认识 RabbitMQ 的发送消息和接收消息。
示例代码:
特别注意:Gradle 构建中一定要使用 spring-boot 的 plugin。
添加 Spring-Boot 插件的方法
在 build.gradle 文件中添加如下配置片段:
buildscript {
ext {
springBootVersion = '1.4.2.RELEASE'
}
repositories {
// NOTE: You should declare only repositories that you need here
mavenLocal()
mavenCentral()
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url "http://repo.spring.io/release" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/snapshot" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'idea'
apply plugin: 'spring-boot'
补充说明:如果想设置阿里巴巴的 nexus 仓库为中央仓库,可以把如下的代码片段粘贴到 build.gradle 文件的第 1 行:
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
1、引入 spring-boot-starter-amqp 模块;
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-amqp', version: '1.3.0.M2'
}
还可以配置 application.properties
spring.application.name=rabbitmq-hello
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
2、编写 RabbitMQ 的配置类
/**
* 特别要说明的是:如果在配置文件中声明了 Queue 对象,就不用在 RabbitMQ 的管理员页面创建队列(Queue)了。
* Created by liwei on 17/3/12.
*/
@Configuration
public class MqConfig {
/**
* 声明接收字符串的队列
*
* @return
*/
@Bean
public Queue stringQueue() {
return new Queue("my-queue");
}
/**
* 声明接收 User 对象的队列
*
* @return
*/
@Bean
public Queue userQueue() {
return new Queue("my-user");
}
}
补充说明:RabbitMQ 管理平台添加队列的方法。

特别要说明的是:如果在配置文件中声明了 Queue 对象,就不用在 RabbitMQ 的管理员页面创建队列(Queue)了。
3、配置 RabbitMQ 的监听器(即接收 MQ 消息的配置)
很简单,使用 @RabbitListener(queues = "my-queue") 注解就可以了。
@Component
public class Receiver {
@RabbitListener(queues = "my-queue")
public void receiveMessage(String message){
System.out.println("接收到的字符串消息是 => " + message);
}
@RabbitListener(queues = "my-user")
public void receiveObject(User user){
System.out.println("------ 接收实体对象 ------");
System.out.println("接收到的实体对象是 => " + user);
}
}
4、编写实体类
特别要注意:实体类一定要实现序列化接口,才可以在网络中传输。
/**
* 特别注意:实体类一定要实现序列化接口,才可以在网络中传输
* Created by liwei on 17/4/25.
*/
public class User implements Serializable {
private final static Long serialVersionUID = 1L;
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User() {
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
5、编写启动类
/**
* 用于测试的控制类
* Created by liwei on 17/3/12.
*/
@RestController
public class SendMQController {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* http://localhost:8080/send?message=hello
*
* @param message
* @return
*/
@RequestMapping("/send")
public String sendMQ(String message) {
rabbitTemplate.convertAndSend("my-queue", message);
return "ok";
}
/**
* http://localhost:8080/send/user
*
* @return
*/
@RequestMapping("/send/user")
public String sendUser() {
User user = new User();
user.setId(1);
user.setUsername("liwei");
user.setPassword("123456");
rabbitTemplate.convertAndSend("my-user", user);
return "OK";
}
}
6、测试方法
启动 MyRabbitMqApplication 的 Main 方法,容器启动以后,访问:
http://localhost:8080/send?message=hello
http://localhost:8080/send/user
观察控制台的输出。
源代码在 GitHub 上的下载地址:
https://github.com/weimingge14/03-springboot-rabbitmq
Spring Boot 集成 RabbitMQ 实战的更多相关文章
- Spring boot集成RabbitMQ(山东数漫江湖)
RabbitMQ简介 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出 ...
- 85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】
这一节我们介绍下Spring Boot整合RabbitMQ,对于RabbitMQ这里不过多的介绍,大家可以参考网络上的资源进行安装配置,本节重点是告诉大家如何在Spring Boot中使用Rabbit ...
- Spring Boot集成Shiro实战
Spring Boot集成Shiro权限验证框架,可参考: https://shiro.apache.org/spring-boot.html 引入依赖 <dependency> < ...
- Spring Boot 集成 Elasticsearch 实战
最近有读者问我能不能写下如何使用 Spring Boot 开发 Elasticsearch(以下简称 ES) 相关应用,今天就讲解下如何使用 Spring Boot 结合 ES. 可以在 ES 官方文 ...
- RabbitMQ(3) Spring boot集成RabbitMQ
springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了spring-boot-starter-amqp项目对消息各种支持. 资源代码:练习用的代码. ...
- spring boot集成RabbitMQ
原文:https://www.jianshu.com/p/e1258c004314 RabbitMQ作为AMQP的代表性产品,在项目中大量使用.结合现在主流的spring boot,极大简化了开发过程 ...
- Spring Boot 集成RabbitMQ
在Spring Boot中整合RabbitMQ是非常容易的,通过在Spring Boot应用中整合RabbitMQ,实现一个简单的发送.接收消息的例子. 首先需要启动RabbitMQ服务,并且add一 ...
- spring boot 集成 rabbitmq 指南
先决条件 rabbitmq server 安装参考 一个添加了 web 依赖的 spring boot 项目 我的版本是 2.5.2 添加 maven 依赖 <dependency> &l ...
- spring boot 集成 rabbitmq
1.使用默认的AmqpTemplate生产消费pojo时,pojo需要implement Serializable,否则会抛出org.springframework.amqp.AmqpExceptio ...
随机推荐
- Mysql 免安装版本配置
1. 安装命令 (制定安装目录的my.ini文件) mysqld --install MySQL --defaults-file="C:\mysql-5.7.26-winx64\bin\my ...
- 浅谈数学上的矩阵——矩阵的乘法运算的概念及C++上的实现模板
首先让我们来谈一谈数学意义上的矩阵(在座各位也可以简单地将它理解为一个二维数组) 这样可以帮助我们理解矩阵加速及其运用的原理(矩阵加速是一个及其玄学的东西,所以请重点理解矩阵乘法) 这里给出一段严格 ...
- UDP信号驱动IO
SIGIO信号 信号驱动式I/O不适用于TCP套接字, 因为产生的信号过于频繁且不能准确判断信号产生的原因. 设置信号驱动需把sockfd的非阻塞与信号驱动属性都打开 server sockfd单独提 ...
- xmake v2.1.9版本发布,增加可视化图形菜单配置
此版本主要增加xmake f --menu实现用户自定义图形菜单配置,界面风格类似linux的make menuconfig: [图片上传失败-(image-505bc0-1517795319124) ...
- LeetCode 算法 Part 1
目录 1. 两数之和 1. 题目 2.代码 4. 算法用时 5. 感想 2. 两数相加 1. 题目 2.代码 4. 算法用时 5. 感想 3. 无重复字符的最长子串 1. 题目 2.代码 4. 算法用 ...
- Python基础-7.1字符串的格式化
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-310 ...
- Python中yield和return两者之间区别
在任何函数都有返回值,一般都是想到return 关键词,在函数生成器中有个关键词 yield 也可以做返回值,在函数没调用之前,是不会输出任何东西的 1,return 用法 def stu(): re ...
- Linux延时执行命令at
也许你的Ubuntu没有at命令,先安装 - sudo apt install at 在某时刻执行命令 - at 15:30:回车之后,需要在at后输入指令,表示在15:30要执行的指令 - 比如输入 ...
- go中string类型转换为基本数据类型的方法
代码 // string类型转基本数据类型 package main import ( "fmt" "strconv" ) func main() { str1 ...
- 详聊js中的原型/原型链
先以一段简单的代码为例: function Dog(params){ this.name = param.name; this.age = param.age; this.ba ...