rabbitmq的延迟队列spring配置(单exchange,多queue)
2017-03-30 17:52
633 查看
<!-- 订单通知服务队列 --> <!-- 创建rabbit ConnectionFactory,连接服务器 --> <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}" username="${rabbitmq.username}" password="${rabbitmq.password}" port="${rabbitmq.port}" virtual-host="${rabbitmq.vhost}" /> <!-- 队列声明 --> <rabbit:queue id="queue_TestNotify" name="queue_TestNotify" durable="true" auto-delete="false" exclusive="false"> <rabbit:queue-arguments> <entry key="x-dead-letter-exchange" value="trade_direct"/> <entry key="x-dead-letter-routing-key" value="routeKey_TradePayNotify_delay_15s"/> </rabbit:queue-arguments> </rabbit:queue> <!-- 监听处理器 --> <bean id="tradePayNotifyListener" class="test.prj.main.rabbit.TradePayNotifyListener" /> <!-- 监听器acknowledge=manual表示手工确认消息已处理(异常时可以不确认消息),auto表示自动确认(只要不抛出异常,消息就会被消费) --> <rabbit:listener-container connection-factory="connectionFactory" acknowledge="manual"> <rabbit:listener queues="queue_TestNotify" ref="tradePayNotifyListener" method="onMessage"/> </rabbit:listener-container> <!-- ################ 延迟队列生产者配置 ################ --> <rabbit:admin connection-factory="connectionFactory" /> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter" /> <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="trade_direct" message-converter="jsonMessageConverter"/> <rabbit:queue id="queue_TestNotify_delay_15s" name="queue_TestNotify_delay_15s" durable="true" auto-delete="false" exclusive="false"> <rabbit:queue-arguments> <entry key="x-message-ttl" value="15000" value-type="java.lang.Long"/> <entry key="x-dead-letter-exchange" value="trade_direct"/> <entry key="x-dead-letter-routing-key" value="routeKey_TradePayNotify"/> </rabbit:queue-arguments> </rabbit:queue> <!-- work exchange --> <rabbit:direct-exchange name="trade_direct" durable="true" auto-delete="false"> <rabbit:bindings> <rabbit:binding queue="queue_TestNotify" key="routeKey_TradePayNotify"/> <rabbit:binding queue="queue_TestNotify_delay_15s" key="routeKey_TradePayNotify_delay_15s"/> </rabbit:bindings> </rabbit:direct-exchange>
注意不同项目中(或者多个生产者如果都创建同一个exchange,queue时,queue,exchange相关配置应该是一样的),否则会报如下错误:
inequivalent arg 'x-dead-letter-routing-key' for queue
可以先把相关的exchange,queue删除,再重新运行程序即可。
问题:这种方式似乎无法实现像支付宝通知那样的,比如:30s通知一次,60s再通知一次,120s再通知一次,等等。
解决:queue_TestNotify 这个队列的配置,去掉x-dead相关配置,使用程序来分发到不同的queue中,例如queue_15s,queue_30s,queue_60s等等队列。这些所有的队列有dlx都指向queue_TestNotify
相关文章推荐
- dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合(十二)之 spring中RabbitMQ延迟队列的实现
- rabbitmq plugins rabbitmq_delayed_message_exchange消息队列延迟消息插件
- Spring集成RabbitMQ并实现延迟队列
- Rabbitmq延迟队列(两个exchange,多个队列)
- Spring Boot与RabbitMQ延迟队列使用示例
- Spring Boot与RabbitMQ结合实现延迟队列的示例
- 创建rabbitmq:virtual host、exchange、queue
- 柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装、配置与监控
- MyBatis延迟加载及在spring中集成配置
- RabbitMQ中 exchange、route、queue的关系
- hibernte与spring结合时,配置使hibernate的session的生命周期延迟,以及配置httpsession的时间
- RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息)
- spring整合消息队列rabbitmq
- RabbitMq的整理 exchange、route、queue关系
- activemq与spring整合,自动消费队列的配置与代码
- spring整合消息队列rabbitmq
- 柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装、配置与监控
- MyBatis延迟加载及在spring中集成配置
- rabbitmq配置集群和镜像队列
- Exchange 2003中配置智能邮件筛选器后包含病毒的邮件滞留在SMTP队列中