设为首页 收藏本站
查看: 1129|回复: 0

[经验分享] springBoot+RabbitMQ例子

[复制链接]

尚未签到

发表于 2017-7-4 08:13:06 | 显示全部楼层 |阅读模式
  demo目录
   DSC0000.png
  贴代码
  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  可以看到控制台有日志输出,发送的消息立即消费掉了
   DSC0001.png
  MQ的队列里面也是空的
   DSC0002.png
  如果把消费者的代码注掉,再访问刚才的 url 地址 队列里面就会多一条
   DSC0003.png
   DSC0004.png
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390698-1-1.html 上篇帖子: .NET开源MSSQL、Redis监控产品Opserver之安全配置 下篇帖子: [转载]Net分布式系统之四:RabbitMQ消息队列应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表