Rabbitmq延遲佇列(兩個exchange,多個佇列)
阿新 • • 發佈:2019-01-05
<!-- ################ 訂單通知服務消費者配置 ################ --> <!-- 建立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"/> <!-- 監聽處理器 --> <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="rabbitTemplateDelay" connection-factory="connectionFactory" exchange="trade_direct_delay" 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> <rabbit:queue id="queue_TestNotify_delay_30s" name="queue_TestNotify_delay_30s" durable="true" auto-delete="false" exclusive="false"> <rabbit:queue-arguments> <entry key="x-message-ttl" value="30000" 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:bindings> </rabbit:direct-exchange> <!-- delay exchange --> <rabbit:direct-exchange name="trade_direct_delay" durable="true" auto-delete="false"> <rabbit:bindings> <rabbit:binding queue="queue_TestNotify_delay_15s" key="routeKey_TradePayNotify_delay_15s"/> <rabbit:binding queue="queue_TestNotify_delay_30s" key="routeKey_TradePayNotify_delay_30s"/> </rabbit:bindings> </rabbit:direct-exchange>
實現類似於支付寶通知機制,例如:15s通知一次,30s通知一次,等等。
問題:通知次數已超過最大次數,丟棄佇列資訊?