RabbitMQ实践--与Spring的简单整合操作
来源:互联网 发布:淘宝 怎么红包 套现 编辑:程序博客网 时间:2024/06/06 22:57
了解RabbitMQ
- 消息队列综述 http://blog.csdn.net/qq_34039315/article/details/77338178
- RabbitMQ–整体简介 http://blog.csdn.net/qq_34039315/article/details/77378641
- RabbitMQ实践–安装、JAVA客户端操 http://blog.csdn.net/qq_34039315/article/details/77428467
与Spring整合
spring支持与rabbit的快速整合
pom.xml
需要的jar包
<?xml version="1.0" encoding="UTF-8"?><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/xsd/maven-4.0.0.xsd"> <parent> <artifactId>alltest</artifactId> <groupId>com.leo.test</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>rabbitmq</artifactId> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>4.1.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.5</version> </dependency> <!-- spring全家桶 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>1.5.2.RELEASE</version> </dependency> <!-- 用来做spring测试 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.0.5.RELEASE</version> </dependency> </dependencies></project>
application-mq.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <description>rabbitmq 连接服务配置</description> <!-- 自动装载bean使能--> <context:component-scan base-package="com.leo.spring"/> <context:annotation-config/> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <!-- PropertyPlaceholderConfigurer类中有个locations属性,接收的是一个数组,即我们可以在下面配好多个properties文件 --> <array> <value>classpath:rabbitmq-config.properties</value> </array> </property> </bean> <!-- 连接配置 --> <rabbit:connection-factory id="connectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}"/> <rabbit:admin connection-factory="connectionFactory"/> <!--申明一个消息队列Queue durable:是否持久化 exclusive: 仅创建者可以使用的私有队列,断开后自动删除 auto_delete: 当所有消费客户端连接断开后,是否自动删除队列--> <rabbit:queue id="test_queue_key" name="test_queue_key" durable="true" auto-delete="false" exclusive="false" /> <!-- 声明Exchange rabbit:direct-exchange:定义exchange模式为direct --> <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> <!-- spring template声明--> <rabbit:template id="amqpTemplate" exchange="test-mq-exchange" connection-factory="connectionFactory" message-converter="jsonMessageConverter" /> <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto"> <rabbit:listener queues="test_queue_key" ref="queueListenter"/> </rabbit:listener-container> <!-- 消息对象json转换类 --> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /></beans>
rabbitmq-config.properties
mq.host=127.0.0.1mq.username=guestmq.password=guestmq.port=5672mq.vhost=/
MQProducer及MQProducerImpl
/** * * @author xuexiaolei * @version 2017年08月22日 */public interface MQProducer { public void sendDataToQueue(String queueKey, Object object);}
import org.springframework.amqp.core.AmqpTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/** * * @author xuexiaolei * @version 2017年08月22日 */@Servicepublic class MQProducerImpl implements MQProducer{ @Autowired private AmqpTemplate amqpTemplate; public void sendDataToQueue(String queueKey, Object object) { amqpTemplate.convertAndSend(queueKey, object); }}
QueueListenter
import org.springframework.amqp.core.Message;import org.springframework.amqp.core.MessageListener;import org.springframework.stereotype.Component;/** * * @author xuexiaolei * @version 2017年08月22日 */@Componentpublic class QueueListenter implements MessageListener { @Override public void onMessage(Message message) { System.out.println(message); }}
运行测试
/** * * @author xuexiaolei * @version 2017年08月22日 */@RunWith(value = SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = { "classpath:/application-mq.xml"})public class MQProducerImplTest { @Autowired MQProducer mqProducer; final String queue_key = "test_queue_key"; @Test public void sendDataToQueue() throws Exception { Map<String,Object> msg = new HashMap(); msg.put("data","hello,rabbmitmq!"); mqProducer.sendDataToQueue(queue_key, msg); }}
问题小记
默认的guest用户只能访问“/”的virtualHost,访问其他的virtualHost会出现下面的错误
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=NOT_ALLOWED - access to vhost 'testmq' refused for user 'guest', class-id=10, method-id=40) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:398) at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:244) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:128) ... 46 more
阅读全文
0 0
- RabbitMQ实践--与Spring的简单整合操作
- rabbitMq与spring的整合
- RabbitMQ与Spring的整合
- 【RabbitMQ】RabbitMQ与Spring整合
- Spring Mvc整合Rabbitmq的简单例子
- rabbitmq与spring整合
- Spring整合RabbitMQ简单示例
- RabbitMQ 与 Spring 整合使用
- jedis与spring整合及简单的使用RedisTemplate操作
- jedis与spring整合及简单的使用RedisTemplate操作
- Spring与mybatis的整合实践
- redis整合spring实现简单的操作
- spring 整合redis的简单操作
- rabbitmq(七)与spring整合快速入门
- 消息队列 RabbitMQ 与 Spring 整合使用
- Rabbitmq 整合Spring,SpringBoot与Docker
- 消息队列 RabbitMQ 与 Spring 整合使用
- 消息队列 RabbitMQ 与 Spring 整合使用
- 别踩白块JavaScript
- [HDU](5178)pairs ---二分查找(查找)
- 基于httpd-2.4.27+php-7.0.22+mysql-5.7.17的WAMP配置(最新)
- 25.odoo入门——工作杂记之many2many, git删除版本控制
- 如何盗走别人博客的个人首页的背景图片
- RabbitMQ实践--与Spring的简单整合操作
- MapReduce找共同好友
- hdu4784 SPFA
- AOP面向切面编程
- jzoj5330 【NOIP2017提高A组模拟8.22】密码
- java生成Excel实例代码
- 8.22--练习赛F题--Muddy roads (模拟)
- HDU 6162 Ch’s gift
- hdu6168-多校9&stl&模拟- Numbers