一、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. jquery.lazyload.js实现图片懒加载

    个人理解:将需要延迟加载的图片的src属性全部设置为一张相同尽可能小(目的是尽可能的少占宽带,节省流量,由于缓存机制,当浏览器加载了一张图片之后,相同的图片就会在缓存中拿,不会重新到服务器上拿)的图片 ...

  2. Spring Boot 文件上传

    其实网上已经有很多这样的文章了.为什么我还要记录一下呢?原因是在工作中对接外系统时,碰到了他们调取我们文件上传接口确存在着http请求头部规范的情况,从而导致用传统方法获取不到参数.今天就来整理下Sp ...

  3. WPF基础篇之移动特效

    前一段时间,在做动画特效的时候,在网上看到了一个水平移动控件的例子.里面用到了RenderTransform特效.在网上查找资料发现了一篇基础的文章: 文章源地址:http://www.ithao12 ...

  4. [HAOI2008]木棍分割

    题目大意 网址:https://daniu.luogu.org/problemnew/show/P2511 题目大意: 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连 ...

  5. [BZOJ4292] [PA2015] Równanie

    Description 对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和.现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数. Input 第 ...

  6. tar命令核心应用案列及多重参数和find组合应用

    tar zcvf 压缩包 文件 打包:尽量切换到打包目录的上级目录,然后用相对路径打包 tar zcvf [随意路径] /框 [相对路径]  一堆苹果 tar tf 查看内容 -z --gzip -- ...

  7. Zabbix 监控 Docker容器

    我们可以通过Python提供的模块docker来取各个docker容器的监控参数.参考文档:http://docker-py.readthedocs.io/en/stable/containers.h ...

  8. 浅谈API安全设计

    一.简述 安全是恒久的话题,如果不注意防范,会带来很严重的后果.比如: 1.接口被大规模调用消耗系统资源,影响系统的正常访问,甚至系统瘫痪 2.数据泄露 3.伪造(篡改)数据,制造垃圾数据 4.App ...

  9. Oracle-数据类型为date 日期查询技巧

    date类型是oracle中存储日期类的一种常用类型,其处理也是在数据库使用中比较多需要注意的地方.如我们可以使用to_char函数将其转化为任意时间格式的字符串,也可使用to_date函数转化相应的 ...

  10. python写一个信息收集四大件的脚本

    0x0前言: 带来一首小歌: 之前看了小迪老师讲的课,仔细做了些笔记 然后打算将其写成一个脚本. 0x01准备: requests模块 socket模块 optparser模块 time模块 0x02 ...