springboot+rabbitmq例子
demo目录

贴代码
1.ProducerConfig.java
package com.test.config; import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* Created by admin on 2017/6/1 13:23.
*/
@Configuration
public class ProducerConfig {
@Bean
public RabbitMessagingTemplate msgMessageTemplate(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
//参数列表分别是:1.交换器名称(default.topic 为默认值),2.是否长期有效,3.如果服务器在不再使用时自动删除交换器
TopicExchange exchange = new TopicExchange("default.topic", true, false);
rabbitAdmin.declareExchange(exchange);
//1.队列名称,2.声明一个持久队列,3.声明一个独立队列,4.如果服务器在不再使用时自动删除队列
Queue queue = new Queue("test.demo.send", true, false, false);
rabbitAdmin.declareQueue(queue);
//1.queue:绑定的队列,2.exchange:绑定到那个交换器,3.test2.send:绑定的路由名称
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with("test2.send"));
return RabbitUtil.simpleMessageTemplate(connectionFactory);
}
}
2.RabbitMQConfig.java
package com.test.config; import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* Created by admin on 2017/6/1 11:26.
*/
@Configuration
public class RabbitMQConfig {
/**
* 注入配置文件属性
*/
@Value("${spring.rabbitmq.addresses}")
String addresses;//MQ地址
@Value("${spring.rabbitmq.username}")
String username;//MQ登录名
@Value("${spring.rabbitmq.password}")
String password;//MQ登录密码
@Value("${spring.rabbitmq.virtual-host}")
String vHost;//MQ的虚拟主机名 /**
* 创建 ConnectionFactory
*
* @return
* @throws Exception
*/
@Bean
public ConnectionFactory connectionFactory() throws Exception {
return RabbitUtil.connectionFactory(addresses, username, password, vHost);
} /**
* 创建 RabbitAdmin
*
* @param connectionFactory
* @return
* @throws Exception
*/
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) throws Exception {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
return rabbitAdmin;
} }
3.RabbitUtil.java
package com.test.config; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.messaging.converter.GenericMessageConverter; /**
* RabbitMQ 公共类
* Created by admin on 2017/6/1 11:25.
*/
public class RabbitUtil { /**
* 初始化 ConnectionFactory
*
* @param addresses
* @param username
* @param password
* @param vHost
* @return
* @throws Exception
*/
public static ConnectionFactory connectionFactory(String addresses, String username, String password, String vHost) throws Exception {
CachingConnectionFactory factoryBean = new CachingConnectionFactory();
factoryBean.setVirtualHost(vHost);
factoryBean.setAddresses(addresses);
factoryBean.setUsername(username);
factoryBean.setPassword(password);
return factoryBean;
} /**
* 初始化 RabbitMessagingTemplate
*
* @param connectionFactory
* @return
*/
public static RabbitMessagingTemplate simpleMessageTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
RabbitMessagingTemplate rabbitMessagingTemplate = new RabbitMessagingTemplate();
rabbitMessagingTemplate.setMessageConverter(new GenericMessageConverter());
rabbitMessagingTemplate.setRabbitTemplate(template);
return rabbitMessagingTemplate;
}
}
4.Student.java
package com.test.model; import java.io.Serializable; /**
* Created by admin on 2017/6/1 13:36.
*/
public class Student implements Serializable {
private String name;
private Integer age;
private String address; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
}
}
5.Consumers.java
package com.test.task; import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service; /**
* Created by admin on 2017/6/1 13:29.
*/
@Service
public class Consumers { @RabbitListener(
//1.rabbitAdmin:RabbitAdmin名称
admin = "rabbitAdmin",
bindings = @QueueBinding(
//1.test.demo.send:队列名,2.true:是否长期有效,3.false:是否自动删除
value = @Queue(value = "test.demo.send", durable = "true", autoDelete = "false"),
//1.default.topic交换器名称(默认值),2.true:是否长期有效,3.topic:类型是topic
exchange = @Exchange(value = "default.topic", durable = "true", type = "topic"),
//test2.send:路由的名称,ProducerConfig 里面 绑定的路由名称(xxxx.to(exchange).with("test2.send")))
key = "test2.send")
)
public void test(Object obj) {
System.out.println("receive....");
System.out.println("obj:" + obj.toString());
}
}
6.Producers.java
package com.test.task; import com.test.model.Student;
import org.springframework.amqp.rabbit.core.RabbitMessagingTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; /**
* Created by admin on 2017/6/1 13:35.
*/
@Service
public class Producers { @Autowired
RabbitMessagingTemplate rabbitSendTemplate; public void send(Student student) {
System.out.println("send start.....");
rabbitSendTemplate.convertAndSend("default.topic", "test2.send", student);
}
}
7.TestController.java
package com.test.test; import com.test.model.Student;
import com.test.task.Producers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; /**
* Created by admin on 2017/6/1 13:38.
*/
@Controller
@RequestMapping(value = "/test")
public class TestController { @Autowired
Producers producers; @RequestMapping(value = "/send", method = RequestMethod.GET)
@ResponseBody
public void test() {
Student s = new Student();
s.setName("zhangsan");
s.setAddress("wuhan");
s.setAge(20);
producers.send(s);
} }
8.MainApplication.java
package com.test; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* Created by admin on 2017/6/1 11:19.
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
System.getProperties().put("test", "test");
SpringApplication.run(MainApplication.class, args); }
}
9.application.yml
server:
address: 192.168.200.117 #自己主机的IP地址
port: 8000 #端口
spring:
rabbitmq:
addresses: 192.168.200.119:5672 #MQ IP 和 端口
username: admin #MQ登录名
password: 123456 #MQ登录密码
virtual-host: test #MQ的虚拟主机名称
10.build.gradle
group 'rabbitmqtest'
version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 repositories {
mavenCentral()
} dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
testCompile("org.springframework.boot:spring-boot-starter-test:1.3.5.RELEASE")
compile("org.springframework.boot:spring-boot-starter-web:1.3.5.RELEASE")
compile(group: 'org.springframework.amqp', name: 'spring-rabbit', version: "1.6.1.RELEASE")
}
11.settings.gradle
rootProject.name = 'rabbitmqtest'
页面访问 192.168.200.117:8000/test/send 可以看到控制台有日志输出,发送的消息立即消费掉了

MQ的队列里面也是空的

如果把消费者的代码注掉,再访问刚才的 url 地址 队列里面就会多一条


springboot+rabbitmq例子的更多相关文章
- springboot+rabbitmq整合示例程
关于什么是rabbitmq,请看另一篇文: http://www.cnblogs.com/boshen-hzb/p/6840064.html 一.新建maven工程:springboot-rabbit ...
- SpringBoot RabbitMQ 延迟队列代码实现
场景 用户下单后,如果30min未支付,则删除该订单,这时候就要可以用延迟队列 准备 利用rabbitmq_delayed_message_exchange插件: 首先下载该插件:https://ww ...
- springboot rabbitmq 死信队列应用场景和完整demo
何为死信队列? 死信队列实际上就是,当我们的业务队列处理失败(比如抛异常并且达到了retry的上限),就会将消息重新投递到另一个Exchange(Dead Letter Exchanges),该Exc ...
- springboot + rabbitmq 做智能家居,我也没想到会这么简单
本文收录在个人博客:www.chengxy-nds.top,共享技术资源,共同进步 前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇 ...
- springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...
- 带着新人学springboot的应用06(springboot+RabbitMQ 中)
上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个RabbitMQ. 注意:这一节还是不用敲什么代码,因为上一节我们设置了那个可视化工具,我们先用用可视化工具熟悉一下流程. ...
- springboot rabbitmq整合
这一篇我们来把消息中间件整合到springboot中 ===================================================================== 首先在 ...
- 刚体验完RabbitMQ?一文带你SpringBoot+RabbitMQ方式收发消息
人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 这篇是消息队列RabbitMQ的第二弹. 上一篇的结尾我也预告了本篇的内容:利用RabbitTemplate和注解进行收发消息,还有一个我 ...
- SpringBoot+RabbitMQ 方式收发消息
本篇会和SpringBoot做整合,采用自动配置的方式进行开发,我们只需要声明RabbitMQ地址就可以了,关于各种创建连接关闭连接的事都由Spring帮我们了~ 交给Spring帮我们管理连接可以让 ...
随机推荐
- 多线程+socket实现多人聊天室
最近在学习多线程的时候打算做一个简单的多线程socke聊天的程序,结果发现网上的代码都没有完整的实现功能,所以自己实现了一个demo: demo功能大致就是,有一个服务端负责信息转发,多个客户端发送消 ...
- 前端面试题(6)图片格式jpg,gif,png-8,png-24的区别,及其各自的使用场景
Gif格式特点: 透明性,Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha透明). 动画,Gif这种格式支持动画. 无损耗性,Gif是一种无损耗的图像格式, ...
- SpringMV---params and headers
配置文件承接一二章 params params:请求的参数 params=value 表示请求过来的参数必须等于value params!=value 表示请求过来的参数必须不等 ...
- C#设计模式之十五命令模式(Command Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第二个模式,该模式是[命令模式],又称为行动(Action)模式或交易(Transaction)模式,英文名称是:Command P ...
- python从2.7升级到3.5 需要主要的问题
今天鼓足勇气把我们python从2.7升级到3.5.我用的是pycharm开发工具.升级过程遇到一些问题小结下: 1.右击项目: 找到左侧 project interpreter选项,配置项目开发环境 ...
- powerdesigner 不能自动生成注释的解决方法
解决power designer 不能自动生成注释的解决办法只需要3步: 一.快捷键 Alt+Shift+X 打开脚本编辑器: 二.将下面天蓝色的字体脚本添加到脚本编辑器里面: Option Expl ...
- C#设计模式之十七观察者模式(Observer Pattern)【行为型】
一.引言 今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份)把所有的模式写完,2018年,新的一年写一些新的东西.今天我们开始讲& ...
- 项目实战——企业级Zabbix监控实战(一)
项目实战--企业级Zabbix监控实战 实验一:Zabbix监控的搭建 1.实验准备 centos系统服务器3台. 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源. 防火墙关闭. 各节点 ...
- node入门笔记
看了<node入门>http://www.nodebeginner.org/index-zh-cn.html.有些疑难点记下来. 在导出模块的时候给出的代码是这样的 var http = ...
- DOM操作中,getElementByXXXX 和 querySelector 的区别
1. 返回值: getElements返回动态集合: 优: 首次查找效率高 缺: 可能造成反复查找DOM树 querySelector返回非动态集合: 优 ...