rabbitmq使用心得

因为公司项目需要使用消息中间件,实现相关业务的异步处理,所有选用了rabbitmq.通过看文档,爬过一个一个坑,终于还是实现了相关功能。

直接上配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:rabbit="http://www.springframework.org/schema/rabbit"
 5        xmlns:util="http://www.springframework.org/schema/util"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7         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">
 8     <bean id="connectionFactory"  class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
 9         <property name="username" value="${mq.userName}" />
10         <property name="password" value="${mq.password}" />
11         <property name="host" value="${mq.host}" />
12         <property name="port" value="${mq.port}" />
13         <property name="virtualHost" value="${mq.virtualHost}"/>
14         <property name="channelCacheSize" value="${mq.cache.size}"/>
15     </bean>
16
17    <bean id="rabbitAdmin"  class="org.springframework.amqp.rabbit.core.RabbitAdmin">
18         <constructor-arg ref="connectionFactory" />
19     </bean>
20     <bean id="rabbitTemplate"  class="org.springframework.amqp.rabbit.core.RabbitTemplate">
21         <constructor-arg ref="connectionFactory"></constructor-arg>
22         <property name="exchange" value="${mq.exchange}"/>
23         <property name="routingKey" value="${mq.routingKey}"/>
24         <property name="queue" value="${mq.queue}"/>
25     </bean>
26
27
28     <bean id="serializerMessageConverter"  class="org.springframework.amqp.support.converter.SimpleMessageConverter"></bean>
29
30
31     <bean id="queue"  class="org.springframework.amqp.core.Queue">
32         <constructor-arg index="0" value="${mq.queue}"></constructor-arg>
33         <constructor-arg index="1" value="true"></constructor-arg>
34         <constructor-arg index="2" value="false"></constructor-arg>
35         <constructor-arg index="3" value="false"></constructor-arg>
36     </bean>
37
38
39     <bean id="directExchange"  class="org.springframework.amqp.core.DirectExchange">
40         <constructor-arg index="0" value="${mq.routingKey}"></constructor-arg>
41         <constructor-arg index="1" value="true"></constructor-arg>
42         <constructor-arg index="2" value="false"></constructor-arg>
43     </bean>
44
45     <util:map id="arguments">
46     </util:map>
47
48
49     <bean id="binding"  class="org.springframework.amqp.core.Binding">
50         <constructor-arg index="0" value="${mq.queue}"></constructor-arg>
51         <constructor-arg index="1" value="QUEUE"></constructor-arg>
52         <constructor-arg index="2" value="${mq.exchange}"></constructor-arg>
53         <constructor-arg index="3" value="${mq.routingKey}"></constructor-arg>
54         <constructor-arg index="4" value="#{arguments}"></constructor-arg>
55     </bean>
56
57
58     <bean id="rmqConsumer"   class="com.tqmall.grace.biz.rabbitmq.MessageQueueReceiver"></bean>
59
60     <bean id="messageListenerAdapter"  class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter">
61         <constructor-arg ref="rmqConsumer" />
62         <property name="defaultListenerMethod" value="onMessage"></property>
63         <property name="messageConverter" ref="serializerMessageConverter"></property>
64     </bean>
65
66     <bean id="listenerContainer"  class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
67         <property name="queues" ref="queue"></property>
68         <property name="connectionFactory" ref="connectionFactory"></property>
69         <property name="messageListener" ref="messageListenerAdapter"></property>
70     </bean>
71 </beans>

在这个配置中,我使用的exchange模式是direct,生产者发送消息到 exchange,exchange根据其生产者的routingkey,找到对应bingkey的队列queue.这样消息就会存到对应的queue中,可以把queue理解为一个存储消息的地方。消费者会从该队列中获取消息,消费消息,返回消息应答,成功,该消息从消息队列中删除。

注意点:

配置queue的时候,Durability设为durable,这样在rabbitmq服务端重启的时候,消息队列里面的消息不回丢失。

配置文件中的如下,配置了在项目启动的时候,会自动去获得exchange,queue,在rabbitmq中注册。

<bean id="rabbitAdmin"  class="org.springframework.amqp.rabbit.core.RabbitAdmin">     <constructor-arg ref="connectionFactory" /> </bean>

在配置中使用的spring的CachingConnectionFactory,用它来管理rabbit的connectionFactory, 其中可以设置其的channelCacheSize,默认是1.这个相当于建立一个channel的缓存池,channel的作用类似于session.一个connection可以创建多个channel. 在该例子中使用SimpleMessageListenerContainer来管理消费者。
时间: 2024-12-24 12:33:25

rabbitmq使用心得的相关文章

rabbitmq记录心得(1)

防止表单提交 rabbitmq可以用来防止表单提交,过程如下: 在后台可以设置rabbitmq的队列,通过rabbitmq来新增或者修改数据,原因如下: 在后台直接判断是否已经添加,不能有效防止,因为用户点击多次,相当于形成多个单线程,可以都会执行到判断里面,这样不能防止表单提交,如果用了rabbitmq,相当于点击多次的方法都在消息队列里面,依次执行进去,在从队列中获取参数的方法里面执行判断,这样才能防止表单提交(相当于单例模式,但是用rabbitmq方便简洁些) 原文地址:https://w

rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较

Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能. 针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/1190000003985468,下面介绍一下Kafka的架构和涉及到的名词: Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Parti

RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总

MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部分:RabbitMQ,ActiveMq,ZeroMq比较 1. TPS比较 一 ZeroMq 最好,RabbitMq 次之, ActiveMq 最差.这个结论来自于以下这篇文章. http://blog.x-aeon.com/2013/04/10/a-quick-message-queue-benc

RabbitMq、ActiveMq、ZeroMq、kafka之间的比较

MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部分:RabbitMQ,ActiveMq,ZeroMq比较 1. TPS比较 一 ZeroMq 最好,RabbitMq 次之, ActiveMq 最差.这个结论来自于以下这篇文章. http://blog.x-aeon.com/2013/04/10/a-quick-message-queue-benc

MQ框架的比较

MQ框架的比较 MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部分:RabbitMQ,ActiveMq,ZeroMq比较 1. TPS比较 一 ZeroMq 最好,RabbitMq 次之, ActiveMq 最差.这个结论来自于以下这篇文章. http://blog.x-aeon.com/2013/04/10/a-quick-message-qu

Kafka、Redis和其它消息组件比较

Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能. 针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/1190000003985468,下面介绍一下Kafka的架构和涉及到的名词: Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Parti

RabbitMQ学习之:(一)初识、概念及心得

因为网上有一篇很好的RMQ的入门帖子http://lostechies.com/derekgreer/tag/rabbitmq/,所以我就不多说了,就说说我目前看了该作者1~5章后,自己的心得.(所以要看懂我写的内容,需要看完那个作者写的1~5章.你可以先跳过这一篇,因为我后面的博文会依次分析该作者的文章的,等分析完1~5章,就可以回过头来看我写的这篇了) 首先,装好RMQ,且激活了Web管理服务之后(需要先暂停服务,然后重启,看帖子),就可以通过http://localhost:15672来访

消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

RabbitMQ.ActiveMQ和ZeroMQ都是极好的消息中间件,但是我们在项目中该选择哪个更适合呢?很多开发者面临这个烦恼.下面我会对这三个消息中间件做一个比较,看了后你们就心中有数了. RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队.此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由.负载均衡或消息持久化等,用消息队列只需几行代码即可搞定.但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了

(转)消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

RabbitMQ.ActiveMQ和ZeroMQ都是极好的消息中间件,但是我们在项目中该选择哪个更适合呢?很多开发者面临这个烦恼.下面我会对这三个消息中间件做一个比较,看了后你们就心中有数了. RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队.此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由.负载均衡或消息持久化等,用消息队列只需几行代码即可搞定.但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了