参考了其他博主的资料,整理成完整的代码,直接拷贝就可以测试。
一、创建一个properties文件
mq.host=127.0.0.1 mq.username=root mq.password=root mq.port=5672 mq.vhost=testmq
mq.vhost表示rabbitMQ虚拟主机,类似一台电脑里面划分了多个虚拟主机,每个虚拟主机都可以有交换器,队列,感觉又类似于一种命令空间。
创建的虚拟主机的可以使用rabbitMQ的工具rabbitmqctl
在命令行中键入rabbitmqctl add_vhost testmq即可创建这个虚拟主机,
创建root用户,rabbitmqctl add_user root root,
创建了虚拟主机之后还需要给root用户授权,授权命令
rabbitmqctl set_permissions -p testmq root .* .* .*
二、spring配置文件和pom.xml
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <context:property-placeholder location="classpath:rabbitmq-config.properties" /> <context:component-scan base-package="com.rabbitMQ"></context:component-scan> <!-- 配置监听器 --> <bean id="queueListenter" class="com.rabbitMQ.listener.QueueListenter"></bean>
<rabbit:connection-factory id="connectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}" /> <rabbit:admin id="admin" connection-factory="connectionFactory" /> <!-- spring template声明 --> <rabbit:template exchange="test-mq-exchange" id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" /> <!-- 消息对象json转换类 --> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /> <!-- 声明一个队列 --> <rabbit:queue id="test_queue_key" name="test_queue_key" durable="true" auto-delete="false" exclusive="false" /> <!-- 声明一个直接转发器 --> <rabbit:direct-exchange name="test-mq-exchange" durable="true" auto-delete="false" id="test-mq-exchange"> <rabbit:bindings> <rabbit:binding queue="test_queue_key" key="test_queue_key" /> </rabbit:bindings> </rabbit:direct-exchange>
<!-- 注册监听器 --> <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto"> <rabbit:listener queues="test_queue_key" ref="queueListenter" /> </rabbit:listener-container> </beans>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.rabbitMQ</groupId> <artifactId>rabbitMQ_integerationSpring</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>rabbitMQ_integerationSpring Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <spring.version>4.3.7.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.7.1.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.20</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <finalName>rabbitMQ_integerationSpring</finalName> </build> </project>
三、监听器,实现MessageListener接口
package com.rabbitMQ.listener; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; public class QueueListenter implements MessageListener { @Override public void onMessage(Message msg) { try{ System.out.println(msg.toString()); System.out.println(new String(msg.getBody())); }catch(Exception e){ e.printStackTrace(); } } }
四、定义一个接口
package com.rabbitMQ.service; public interface MQProducer { /** * 发送消息到指定队列 * @param queueKey * @param object */ public void sendDataToQueue(String queueKey, Object object); }
五、实现MQProducer接口
package com.rabbitMQ.service.impl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.rabbitMQ.service.MQProducer; @Service public class MQProducerImpl implements MQProducer { @Autowired private AmqpTemplate amqpTemplate; private final static Logger LOGGER = LoggerFactory.getLogger(MQProducerImpl.class); @Override public void sendDataToQueue(String queueKey, Object object) { try { //将Java对象转换为消息发送到匹配Key的交换机中Exchange,由于配置了JSON转换,这里是将Java对象转换成JSON字符串的形式。 amqpTemplate.convertAndSend(queueKey, object); } catch (Exception e) { LOGGER.error(e.getMessage()); } } }
六、测试
package com.rabbitMQ.test; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.rabbitMQ.service.MQProducer; @RunWith(value = SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:application-mq.xml"}) public class TestQueue{ @Autowired MQProducer mqProducer; final String queue_key = "test_queue_key"; @Test public void send(){ Map<String,Object> msg = new HashMap<String, Object>(); msg.put("data","hello,rabbmitmq!"); mqProducer.sendDataToQueue(queue_key,msg); } }