85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】
这一节我们介绍下Spring Boot整合RabbitMQ,对于RabbitMQ这里不过多的介绍,大家可以参考网络上的资源进行安装配置,本节重点是告诉大家如何在Spring Boot中使用RabbitMQ,那么本节分如下几个步骤:
(1) 新建Maven Java Project;
(2) 在pom.xml添加相关依赖;
(3) 编程+测试
(4) 配置信息
接下来看看每个步骤是怎么操作的。
(1) 新建Maven Java Project;
新建一个Maven Java Project项目,取名为spring-boot-rabbitmq
(2) 在pom.xml添加相关依赖;
这里需要加入基本的依赖以及rabbitmq相关的依赖,具体如下:
<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.kfit</groupId>
<artifactId>spring-boot-rabbitmq</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-boot-rabbitmq</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- jdk版本号,Angel在这里使用1.8,大家修改为大家本地配置的jdk版本号即可 -->
<java.version>1.8</java.version>
</properties>
<!--
spring boot 父节点依赖,
引入这个之后相关的引入就不需要添加version配置,
spring boot会自动选择最合适的版本进行添加。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- spring boot web支持:mvc,aop... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
</project>
(3) 编程+测试
在这里我们为了方便直接在启动类App.java进行编码,先提供代码:
package com.kfit;
import java.util.Date;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
*
* @author Angel --守护天使
* @version v.0.1
* @date 2016年8月23日
*/
@SpringBootApplication
@EnableScheduling//启用任务调度.
@RabbitListener(queues="foo")//启用Rabbit队列监听foo key.
public class App {
//rabbit操作类;
@Autowired
private RabbitTemplate rabbitTemplate;
@Scheduled(fixedDelay=3000)//3s执行1次此方法;
public void send(){
rabbitTemplate.convertAndSend("foo","zhang");
}
@Bean
public Queue fooQueue(){
returnnew Queue("foo");
}
//接收到消息处理.
@RabbitHandler
public void onMessage(@Payload String foo){
System.out.println(" >>> "+new Date() + ": " + foo);
}
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
好了,到这里就可以运行测试了,观察控制台的打印信息:
>>> Tue Aug 23 15:06:54 CST 2016: zhang
>>> Tue Aug 23 15:06:57 CST 2016: zhang
>>> Tue Aug 23 15:07:00 CST 2016: zhang
看到如上信息,恭喜你简单的例子编写成功了。好了,上面的源代码还是有必要进行简单的讲解下。
首先我们需要清除RabbitMQ的话有这么几个角色,消息生产者或者说消息提供者(sender);其次就是消息队列提供存放消息的对方(queue);消息消费者或者说消息接收者(receiver)。知道这些概念之后在看代码就好理解很多了。
我们先看消息提供者:send()方法,这里使用Spring 提供的RabbitTemplate 进行操作消息,调用convertAndSend方法将消息发布到对应的消息频道上,这里也就是使用Queue进行存储;然后我们注意到这个方法不是我们人为执行的方法而是采用定时执行的方式进行3s一次进行发布消息,所以你会看到send方法上有一个注解@Scheduled,那么使用该注解的话,相应的类上上面就需要@EnableScheduling启用注解。
在上面的分析中我们说消息被发布到队列中,所以我们需要创建一个Queue进行存放,这里需要注意Queue的包路径是org.springframework.amqp.core.Queue。
这里我们注入了fooQueue 方法指定队列的名称是foo,那么此队列只会处理key为foo的消息,其它的key不会处理。
最后就是消息的接收者了:这里我们使用了@RabbitHandler定义了一个消息接收者onMessage,其中这个方法名可以随意取名,再者我们需要启用Rabbit监听,所以需要在类上添加@RabbitListener,这样编写完就能按照我们的想法执行了。那么如果我们编写了两个消息接收者的话,可以正常运行嘛,两个接收者都能接收到消息嘛,答案是肯定的,因为我们以上的编码是发布(Pub)/订阅(Sub)消息模型。
很有意思的是,这个方法还可以在简化下,将类上的@RabbitListener直接转移到方法上,去掉@RabbitHandler注解,直接为如下:
//接收到消息处理.
@RabbitListener(queues = "foo")
public void onMessage(@Payload String foo){
System.out.println(" >new>> "+new Date() + ": " + foo);
}
(4) 配置信息
在以上的代码你会发现我们根本没有添加什么配置信息,所以spring boot提供了默认的配置,那么我们应该怎么修改配置呢,只需要在application.properties进行配置即可:
# RABBIT (RabbitProperties)
spring.rabbitmq.host= # connection host
spring.rabbitmq.port=# connection port
spring.rabbitmq.addresses= # connection addresses (e.g. myhost:9999,otherhost:1111)
spring.rabbitmq.username= # login user
spring.rabbitmq.password= # login password
spring.rabbitmq.virtualhost=
spring.rabbitmq.dynamic=
这里可以配置主机地址,端口号,用户名密码(默认使用guest/guest)。
85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】的更多相关文章
- 63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 事情的起源,无意当中在一个群里看到这么一句描述:"有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa&quo ...
- 47. Spring Boot发送邮件【从零开始学Spring Boot】
(提供源代码) Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Bo ...
- 20. Spring Boot Servlet【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52069482 Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可 ...
- (20)Spring Boot Servlet【从零开始学Spring Boot】
Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet.Filter.Listener.Interceptor 等等. 当使用Spring-Boot时,嵌 ...
- 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】
[原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...
- (37)Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】
[本文章是否对你有用以及是否有好的建议,请留言] 写后感:博主写这么一系列文章也不容易啊,请评论支持下. 如果看过我之前(35)的文章这一篇的文章就会很简单,没有什么挑战性了. 那么我们先说说这一篇文 ...
- 57. Spring 自定义properties升级篇【从零开始学Spring Boot】
之前在两篇文章中都有简单介绍或者提到过 自定义属性的用法: 25.Spring Boot使用自定义的properties[从零开始学Spring Boot] 51. spring boot属性文件之多 ...
- 17、Spring Boot普通类调用bean【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...
- 21. Spring Boot过滤器、监听器【从零开始学Spring Boot】
转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter) ...
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
[原创文章,转载请注明出处] 个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析 ...
随机推荐
- kafka安装和使用
kafka安装和启动 kafka的背景知识已经讲了很多了,让我们现在开始实践吧,假设你现在没有Kafka和ZooKeeper环境. Step 1: 下载代码 下载0.10.0.0版本并且解压它. &g ...
- jquery.qrcode.min.js生成二维码
jquery.qrcode.min.js是一款可以生成二维码的插件,使用前提是先引入jquery,因为jquery.qrcode.min.js依赖jquery. 基本用法 1.引入js <scr ...
- 十四个关于ASP.NET基础知识问答(C#版)
这是一些ASP.NET很基础的东西,希望对ASP.NET爱好者特别是刚刚入门的朋友有所帮助虽然示例代码是C#.NET,但是不影响VB.NET朋友的参考.好,继续往下看吧! 1.ASP.NET能在那些系 ...
- js 字符串常用操作
function Class_String_Common(){ //将字符串 myString 的 start位置 和 end位置 之间的内容替换为 replaceStr this.replace1 ...
- 剑指offer——把字符串转换成整数(c++)
题目描述请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 示例 1:输入: " -42"输出: -42解释: 第一个非空 ...
- Centos7 安装python3.5.3
使用root用户安装:切换到root用户 su 回车,然后输入密码,切换到root用户. 新建一个脚本,如installPython.sh #!/bin/bash yum -y install zli ...
- SniperOJ-leak-advanced-x86-64
借助DynELF实现无libc的漏洞利用小结 1.leak-advance与leak的区别在于一个可用函数是write,一个可用函数是puts.write比puts更容易利用,虽然write需要的参数 ...
- dedeCMS数据库字段详细介绍
dede_addonarticle 附加文章表 aid int(11) 文章编号 typeid int(11) 分类栏目编号 body mediumtext 文章内容 dede_addonflash ...
- codevs 数字三角形集结
添在前面的一句话:初学DP,若有错误,请指出,不能误人子弟,欢迎大家提出意见.水平不高,博客写的比较粗糙,代码也挺丑,请见谅. 最原始的数字三角形: 1220 数字三角形 时间限制: 1 s 空间 ...
- 【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列
hash大法好(@ARZhu):大数相乘及时取模真的是件麻烦事情 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次 ...