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例子的更多相关文章

  1. springboot+rabbitmq整合示例程

    关于什么是rabbitmq,请看另一篇文: http://www.cnblogs.com/boshen-hzb/p/6840064.html 一.新建maven工程:springboot-rabbit ...

  2. SpringBoot RabbitMQ 延迟队列代码实现

    场景 用户下单后,如果30min未支付,则删除该订单,这时候就要可以用延迟队列 准备 利用rabbitmq_delayed_message_exchange插件: 首先下载该插件:https://ww ...

  3. springboot rabbitmq 死信队列应用场景和完整demo

    何为死信队列? 死信队列实际上就是,当我们的业务队列处理失败(比如抛异常并且达到了retry的上限),就会将消息重新投递到另一个Exchange(Dead Letter Exchanges),该Exc ...

  4. springboot + rabbitmq 做智能家居,我也没想到会这么简单

    本文收录在个人博客:www.chengxy-nds.top,共享技术资源,共同进步 前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇 ...

  5. springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...

  6. 带着新人学springboot的应用06(springboot+RabbitMQ 中)

    上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个RabbitMQ. 注意:这一节还是不用敲什么代码,因为上一节我们设置了那个可视化工具,我们先用用可视化工具熟悉一下流程. ...

  7. springboot rabbitmq整合

    这一篇我们来把消息中间件整合到springboot中 ===================================================================== 首先在 ...

  8. 刚体验完RabbitMQ?一文带你SpringBoot+RabbitMQ方式收发消息

    人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 这篇是消息队列RabbitMQ的第二弹. 上一篇的结尾我也预告了本篇的内容:利用RabbitTemplate和注解进行收发消息,还有一个我 ...

  9. SpringBoot+RabbitMQ 方式收发消息

    本篇会和SpringBoot做整合,采用自动配置的方式进行开发,我们只需要声明RabbitMQ地址就可以了,关于各种创建连接关闭连接的事都由Spring帮我们了~ 交给Spring帮我们管理连接可以让 ...

随机推荐

  1. javaweb学习方案1

    一.JAVA环境变量的配置1.首先下载JDK JDK可以在Oracle(甲骨文)公司的官方网站http://www.oracle.com下载2.安装完成后查看JDK安装路径一般是C:\Program ...

  2. OpenTSDB介绍

    OpenTSDB 2.0, the scalable, distributed time series database可扩展.分布式时间序列数据库 1.背景 一些老的监控系统,它常常会出现这样的问题 ...

  3. Redis安装及使用笔记

    windows下安装Redis 1.下载Redis的软件包 Redis on github; 2.将软件解压到服务器软件目录; 3.在命令行运行此命令: ./redis-server redis.wi ...

  4. 一步一步带你实现virtual dom(二) -- Props和事件

    很高兴我们可以继续分享编写虚拟DOM的知识.这次我们要讲解的是产品级的内容,其中包括:设置和DOM一致性.以及事件的处理. 使用Babel 在继续之前,我们需要弥补前一篇文章中没有详细讲解的内容.假设 ...

  5. 并行设计模式(一)-- Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  6. selenium 执行js,实现滚动条

    今天在写脚本的时候,学习了执行js,实现滚动条,对于scrollTop=10000中这个10000是怎么来的,还不是很了解,先将方法记录一下, 1.滚动条回到顶部: js_up="docum ...

  7. mvc约定

    mvc是围绕一些基于约定的默认项,这写默认项在必要时可以覆盖,这个概念通常成为"约定优于配置". 比如没必要在web.config中设置views,models等文件夹的名称,已经 ...

  8. apache通过AD验证

    ## apache通过AD验证 #yum install httpd mod_authz_ldap#安装apahce的ldap模块yum install mod_authz_ldap -y #配置ap ...

  9. 排列oj

    835:排列 总时间限制: 5000ms 内存限制: 65536kB 描述 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n= ...

  10. 使用SSH快速下载Git项目

    文章首发于[博客园-陈树义],点击跳转到原文使用SSH快速下载Git项目. Git下载项目的几种方式 Git是常用的代码版本技术,而GitLab则是开源的Git版本管理软件,GitLab是最受欢迎的版 ...