一、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的更多相关文章

  1. spring boot 2.x 系列 —— spring boot 整合 RabbitMQ

    文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(rabbitmq-common) 四.服务消费者(rabbitmq-consumer) 4.1 消息消费者配置 4.2 使用注解@Rabbit ...

  2. Spring Boot 整合 rabbitmq

    一.消息中间件的应用场景 异步处理 场景:用户注册,信息写入数据库后,需要给用户发送注册成功的邮件,再发送注册成功的邮件. 1.同步调用:注册成功后,顺序执行发送邮件方法,发送短信方法,最后响应用户 ...

  3. 关于RabbitMQ以及RabbitMQ和Spring的整合

    转自:https://www.cnblogs.com/s648667069/p/6401463.html 基本概念 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是 ...

  4. Spring Boot (十三): Spring Boot 整合 RabbitMQ

    1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用 ...

  5. Spring与Struts2整合VS Spring与Spring MVC整合

    Spring与Struts2整合,struts.xml在src目录下 1.在web.xml配置监听器 web.xml <!-- 配置Spring的用于初始化ApplicationContext的 ...

  6. 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代码 ...

  7. MyBatis+Spring+Spring MVC整合开发

    MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...

  8. RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)

    RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...

  9. Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

    Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...

随机推荐

  1. web开发中对缓存的使用

    很久没有发表随笔了,最近工作不是太忙,抽点时间 给大家谈谈缓存吧 ; 在我从事web开发的几年实践中  接触了缓存技术 也是比较多的,在最初的 项目当中 我们用到 hibernate 的 一二级缓存, ...

  2. CentOS修改root密码

    1.在系统启动时,按任意键中止启动 2.按E键修改系统启动文件 3.找到linux16开头的行,把整行ro后面内容删除,添加rd.break 4.Ctrl+X更改并重启 5.重新挂载/sysroot ...

  3. TreeNode.trage的使用

    对于trage的使用 msdn是这样解释的 TreeNode.Target 属性 .NET Framework 2.0 其他版本 注意:此属性在 .NET Framework 2.0 版中是新增的. ...

  4. 非空校验的提示按钮(shiro项目中来的六)

    一:图示 二,js脚本 /** * jquery tips 提示插件 jquery.tips.js v0.1beta * * 使用方法 * $(selector).tips({ //selector ...

  5. 利用SSH端口转发实现跨机器直接访问

    在实际项目测试中经常会遇到数据库操作,但是因为公司安全问题,访问数据库往往需要通过跳板机.但通过跳板机,测试效率大打折扣,因此通过使用SSH端口转发,从而达到跨机器直接访问数据库.实际项目中的应用会比 ...

  6. Entity Framework Core 2.0 入门简介

    不多说废话了, 直接切入正题. EF Core支持情况 EF Core的数据库Providers: 此外还即将支持CosmosDB和 Oracle. EFCore 2.0新的东西: 查询: EF.Fu ...

  7. 【BZOJ2243】【SDOI2011】染色(树链剖分,线段树)

    题面 我们也要换个花样,这回提供洛谷的题面 题解 线段树+树链剖分大水题 维护颜色段的方法很简单呀... 维护当前区间内的颜色段个数, 以及当前区间左端和右端的颜色, 合并的时候考虑是否要减一下就行了 ...

  8. 杜教筛:Bzoj3944: sum

    题意 求\(\sum_{i=1}^{n}\varphi(i)和\sum_{i=1}^{n}\mu(i)\) \(n <= 2^{31}-1\) 不会做啊... 只会线性筛,显然不能线性筛 这个时 ...

  9. [BZOJ1385] [Baltic2000] Division expression (数学)

    Description 除法表达式有如下的形式: X1/X2/X3.../Xk 其中Xi是正整数且Xi<=1000000000(1<=i<=k,K<=10000) 除法表达式应 ...

  10. 【noip模拟】最小点覆盖

    Time Limit: 1000ms      Memory Limit: 128MB Description 最小点覆盖是指在二分图中,用最小的点集覆盖所有的边.当然,一个二分图的最小点覆盖可能有很 ...