1.pom文件引入依赖
<!--rabbitmq依赖 -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
2. Spring配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd
http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.7.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd">
<mvc:annotation-driven />
<aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true" />
<!-- 扫描有注解的文件 base-package 包路径 -->
<context:component-scan base-package="com.lfv.rmq" />
<!-- 注解引入 -->
<context:annotation-config/>
<bean id="propertyConfigure" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config/*.properties</value>
</list>
</property>
</bean>
<!-- MQ -->
<rabbit:connection-factory id="connectionFactory" publisher-confirms="true" host="10.10.106.39" username="admin" password="admin" port="5672" virtual-host="/vHost" />
<!-- 自动创建 队列 -->
<rabbit:admin connection-factory="connectionFactory" />
<!--声明模板-->
<rabbit:template id="amqpTemplate" exchange="test_rmq_exchange" connection-factory="connectionFactory" />
<!--创建队列queue,路由exchange及绑定binding关系-->
<!-- durable队列持久化;消费者都解除订阅此队列 自动删除消息 ;exclusive 是否排他队列-->
<rabbit:queue id="test_queue_id" name="test_queue" durable="true" auto-delete="false" exclusive="false" />
<rabbit:topic-exchange name="test_rmq_exchange" durable="true" auto-delete="false">
<rabbit:bindings>
<rabbit:binding queue="test_queue" pattern="test_queue_patt"/>
</rabbit:bindings>
</rabbit:topic-exchange>
<!--1. 简单模式:一个消费者 -->
<!-- 消费者 -->
<bean name="rabbitmqConsumer" class="com.lfv.rmq.RabbitmqConsumer"/>
<!-- 配置监听 -->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener queues="test_queue_id" ref="rabbitmqConsumer" response-exchange="test_rmq_exchange"/>
</rabbit:listener-container>
<!-- 2.工作模式: 多个消费者,每个消费者处理的信息是不一样的,用在高并发 -->
<!-- 消费者 -->
<bean name="rabbitmqConsumer2" class="com.lfv.rmq.topic.ConsumerTopic"/>
<!-- 配置监听 -->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener queues="test_queue_id" ref="rabbitmqConsumer2" response-exchange="test_rmq_exchange"/>
</rabbit:listener-container>
<!-- 消息对象json转换类 -->
<bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" />
</beans>
3.发送消息Producer
package com.lfv.rmq;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
*
* 描述:发送端
* @auther:liufei
* @Date:2019年7月31日
*/
@Controller
public class RabbitmqController {
@Resource
private RabbitTemplate amqpTemplate;
@RequestMapping(value = "/rmq.do")
public void sendMsg(HttpServletResponse response) {
try {
for (int i = 1; i <= 10; i++){
amqpTemplate.convertAndSend("test_rmq_exchange", "test_queue_patt", "rmqProducer-sendMsg......."+i);
System.out.println("One Msg sended....."+i);
}
response.getWriter().write("message sended....................");
} catch (Exception e) {
}
}
}
4.异步接收消息Consumer
package com.lfv.rmq;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
/**
* 描述:接收端
* @auther:liufei
* @Date:2019年7月31日
*/
public class RabbitmqConsumer implements MessageListener {
public void onMessage(Message message) {
System.out.print("Msg consumed-1:");
System.out.println(new String(message.getBody()));
}
}