【RabbitMQ系列】 Spring mvc整合RabbitMQ
一、linux下安装rabbitmq
1、安装erlang环境
wget http://erlang.org/download/otp_src_18.2.1.tar.gz
tar xvfz otp_src_18.2.1.tar.gz
cd otp_src_18.2.1
./configure
make install
2、安装RabbitMQ
wget http://www.rabbitmq.com/releases/rabbitmq-server/vx.x.x/rabbitmq-server-generic-unix-x.x.x.tar.xz
//xy文件压缩工具
yum install xz
//解压
xz -d rabbitmq-server-generic-unix-x.x.x.tar.xz
tar -xvf rabbitmq-server-generic-unix-x.x.x.tar
//将其移动至/usr/local/下 按自己习惯
cp -r rabbitmq_server-x.x.x /usr/local/rabbitmq
//改变环境变量
vi /etc/profile
export PATH=/usr/local/rabbitmq/sbin:$PATH
source /etc/profile
//启用MQ管理方式
rabbitmq-plugins enable rabbitmq_management #启动后台管理
rabbitmq-server -detached #后台运行rabbitmq
//设置端口号 可供外部使用
iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
3、添加用户和权限
//添加用户
rabbitmqctl add_user admin admin
//添加权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
//添加用户角色
rabbitmqctl set_user_tags admin administrator
二、Spring mvc整合RabbitMQ
1、添加pom.xml依赖jar包
<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.7.5.RELEASE</version>
</dependency>
2、添加配置applicationContext.xml
<!--配置rabbitmq开始-->
<bean id="connectionFactoryMq" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="192.168.181.201"/>
<property name="username" value="admin"/>
<property name="password" value="admin"/>
<property name="host" value="192.168.181.201"/>
<property name="port" value="5672"/>
</bean>
<bean id="rabbitAdmin" class="org.springframework.amqp.rabbit.core.RabbitAdmin">
<constructor-arg ref="connectionFactoryMq"/>
</bean>
<!--创建rabbitTemplate消息模板类-->
<bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<constructor-arg ref="connectionFactoryMq"/>
</bean>
<!--创建消息转换器为SimpleMessageConverter-->
<bean id="serializerMessageConverter" class="org.springframework.amqp.support.converter.SimpleMessageConverter">
</bean>
<!--创建持久化的队列-->
<bean id="queue" class="org.springframework.amqp.core.Queue">
<constructor-arg index="0" value="testQueue"></constructor-arg>
<constructor-arg index="1" value="true"></constructor-arg>
<constructor-arg index="2" value="false"></constructor-arg>
<constructor-arg index="3" value="true"></constructor-arg>
</bean>
<!--创建交换器的类型 并持久化-->
<bean id="topicExchange" class="org.springframework.amqp.core.TopicExchange">
<constructor-arg index="0" value="testExchange"></constructor-arg>
<constructor-arg index="1" value="true"></constructor-arg>
<constructor-arg index="2" value="false"></constructor-arg>
</bean>
<util:map id="arguments"> </util:map>
<!--绑定交换器 队列-->
<bean id="binding" class="org.springframework.amqp.core.Binding">
<constructor-arg index="0" value="testQueue"></constructor-arg>
<constructor-arg index="1" value="QUEUE"></constructor-arg>
<constructor-arg index="2" value="testExchange"></constructor-arg>
<constructor-arg index="3" value="testQueue"></constructor-arg>
<constructor-arg index="4" value="#{arguments}"></constructor-arg>
</bean>
<!--用于接收消息的处理类-->
<bean id="rqmConsumer" class="com.slp.mq.RmqConsumer"></bean> <bean id="messageListenerAdapter" class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">
<constructor-arg ref="rqmConsumer" />
<property name="defaultListenerMethod" value="rmqProducerMessage"></property>
<property name="messageConverter" ref="serializerMessageConverter"></property>
</bean>
<!-- 用于消息的监听的容器类SimpleMessageListenerContainer,监听队列 queues可以传多个-->
<bean id="listenerContainer" class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
<property name="queues" ref="queue"></property>
<property name="connectionFactory" ref="connectionFactoryMq"></property>
<property name="messageListener" ref="messageListenerAdapter"></property>
</bean>
<bean id="rmqProducer" class="com.slp.mq.RmqProducer"></bean>
<!--配置rabbitmq结束-->
3、消息实体类
package com.slp.mq; import java.io.*; /**
* @author sanglp
* @create 2018-02-06 14:00
* @desc rabbit消息类
**/
public class RabbitMessage implements Serializable {
/**
* 参数类型
*/
private Class<?>[] paramTypes ;
/**
* 交换器
*/
private String exchange; private Object[] params;
/**
* 路由key
*/
private String routekey; public RabbitMessage() {
} public RabbitMessage(String exchange, String routekey,Object...params) {
this.exchange = exchange;
this.params = params;
this.routekey = routekey;
} @SuppressWarnings("rawtypes")
public RabbitMessage(String exchange,String routeKey,String methodName,Object...params)
{
this.params=params;
this.exchange=exchange;
this.routekey=routeKey;
int len=params.length;
Class[] clazzArray=new Class[len];
for(int i=0;i<len;i++) {
clazzArray[i] = params[i].getClass();
}
this.paramTypes=clazzArray;
} public byte[] getSerialBytes(){
byte[] res = new byte[0];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutput oos ;
try {
oos = new ObjectOutputStream(baos);
oos.writeObject(this);
oos.close();
res = baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} return res;
} public Class<?>[] getParamTypes() {
return paramTypes;
} public void setParamTypes(Class<?>[] paramTypes) {
this.paramTypes = paramTypes;
} public String getExchange() {
return exchange;
} public void setExchange(String exchange) {
this.exchange = exchange;
} public Object[] getParams() {
return params;
} public void setParams(Object[] params) {
this.params = params;
} public String getRoutekey() {
return routekey;
} public void setRoutekey(String routekey) {
this.routekey = routekey;
}
}
4、生产者
package com.slp.mq; import org.springframework.amqp.rabbit.core.RabbitTemplate; import javax.annotation.Resource; /**
* @author sanglp
* @create 2018-02-06 14:19
* @desc 生产者
**/
public class RmqProducer { @Resource
private RabbitTemplate rabbitTemplate; /**
* 发送信息
* @param msg
*/
public void sendMessage(RabbitMessage msg){
System.out.println(rabbitTemplate.getConnectionFactory().getHost());
System.out.println(rabbitTemplate.getConnectionFactory().getPort());
System.out.println("msg"+msg);
rabbitTemplate.convertAndSend(msg.getExchange(),msg.getRoutekey(),msg);
System.out.println("发送完成"); }
}
5、消费者
package com.slp.mq; /**
* @author sanglp
* @create 2018-02-06 14:23
* @desc 消费者
**/
public class RmqConsumer { public void rmqProducerMessage(Object object){
System.out.println("消费前");
RabbitMessage rabbitMessage = (RabbitMessage) object;
System.out.println(rabbitMessage.getExchange());
System.out.println(rabbitMessage.getRoutekey());
System.out.println(rabbitMessage.getParams().toString());
}
}
6、测试类
package com.slp; import com.slp.mq.RabbitMessage;
import com.slp.mq.RmqConsumer;
import com.slp.mq.RmqProducer;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; import java.util.HashMap;
import java.util.Map; /**
* @author sanglp
* @create 2018-02-06 14:36
* @desc mq测试类
**/
public class MqTest { private RmqProducer rmqProducer ;
private RmqConsumer rqmConsumer ;
@Before
public void setUp() throws Exception {
//ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("D:/web-back/web-back/myweb/web/WEB-INF/applicationContext.xml");
//context.start(); String path="web/WEB-INF/applicationContext.xml";
ApplicationContext context = new FileSystemXmlApplicationContext(path);
rmqProducer = (RmqProducer) context.getBean("rmqProducer");
rqmConsumer = (RmqConsumer)context.getBean("rqmConsumer");
}
@Test
public void test(){
String exchange = "testExchange";
String routeKey ="testQueue";
String methodName = "test";
//参数
for (int i=0;i<10;i++){
Map<String,Object> param=new HashMap<String, Object>();
param.put("data","hello"); RabbitMessage msg=new RabbitMessage(exchange,routeKey, methodName, param);
//发送消息
rmqProducer.sendMessage(msg);
} // rqmConsumer.rmqProducerMessage(msg); }
}
运行结果:
没有开启消费者之前:

【RabbitMQ系列】 Spring mvc整合RabbitMQ的更多相关文章
- spring boot 2.x 系列 —— spring boot 整合 RabbitMQ
文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(rabbitmq-common) 四.服务消费者(rabbitmq-consumer) 4.1 消息消费者配置 4.2 使用注解@Rabbit ...
- Spring Boot 整合 rabbitmq
一.消息中间件的应用场景 异步处理 场景:用户注册,信息写入数据库后,需要给用户发送注册成功的邮件,再发送注册成功的邮件. 1.同步调用:注册成功后,顺序执行发送邮件方法,发送短信方法,最后响应用户 ...
- 关于RabbitMQ以及RabbitMQ和Spring的整合
转自:https://www.cnblogs.com/s648667069/p/6401463.html 基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是 ...
- Spring Boot (十三): Spring Boot 整合 RabbitMQ
1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用 ...
- Spring与Struts2整合VS Spring与Spring MVC整合
Spring与Struts2整合,struts.xml在src目录下 1.在web.xml配置监听器 web.xml <!-- 配置Spring的用于初始化ApplicationContext的 ...
- spring MVC 整合mongodb
Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码 ...
- MyBatis+Spring+Spring MVC整合开发
MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...
- RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)
RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...
- Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例
Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...
随机推荐
- vue全局配置----小白基础篇
今天学习vue全局配置.希望帮助我们去了解vue的全局配置,快速开发. Vue.config是vue的全局配置对象.包含Vue的所有全局属性: silent:boolean(默认值:false)--- ...
- 决策树系列(五)——CART
CART,又名分类回归树,是在ID3的基础上进行优化的决策树,学习CART记住以下几个关键点: (1)CART既能是分类树,又能是分类树: (2)当CART是分类树时,采用GINI值作为节点分裂的依据 ...
- Query 插件为什么要return this.each()
jQuery.fn.test2= function(){ this.css("background","#ff0");//这里面的this为jquery对象,而 ...
- json格式数据整理
一,json的两种数据结构 1.1,对象 对象结构以"{"大括号开始,以"}"大括号结束.中间部分由0或多个以","分隔的"key ...
- 微信小程序—微信自动退款
微信小程序—微信自动退款 一.业务背景 微信自动退款串接基于酷客多小程序商城系统,为方便财务人员进行订单退款而开发,将酷客多小程序系统财务退款流程和微信退款系统打通.实现一个系统管理运营. 二.业务流 ...
- 由会话信息保存认识ThreadLocal
这次想总结ThreadLocal这个东西,也是由于项目中使用到了它去帮助保存会话信息.传统的(或者说我在学校的时候)方法,大多是用服务端的session保存会话,与浏览器端的cookie协作去追踪这个 ...
- 【Luogu1501】Tree(Link-Cut Tree)
[Luogu1501]Tree(Link-Cut Tree) 题面 洛谷 题解 \(LCT\)版子题 看到了顺手敲一下而已 注意一下,别乘爆了 #include<iostream> #in ...
- [cogs2701]动态树
题面戳我 sol 比较裸啊. 注意操作顺序就行了. code #include<cstdio> #include<algorithm> using namespace std; ...
- [BZOJ3668] [Noi2014] 起床困难综合症 (贪心)
Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...
- Object类----toString,equals,hashcode
一.toString 的应用方法与覆写 public class testoveridetoString { public static void main(String[] args) { /*ob ...