シーン
支払われていない場合は、単一のユーザー、30分後、そして、あなたがキューを遅らせることができ、この時間を順に削除
レディ
rabbitmq_delayed_message_exchangeプラグを使用します。
:まず、プラグインをダウンロードしてくださいhttps://www.rabbitmq.com/community-plugins.htmlを
プラグは、次いで、ディレクトリRabbitMQのプラグインにインストールされています。
sbinディレクトリに、 "RabbitMQの-plugins.bat rabbitmq_delayed_message_exchangeを有効にする" を実行。
閉じるRabbitMQのサービス、そして(プラグインの即時再起動を有効にしない場合があります)を起動します。
SpringBoot RabbitMQのコード
application.propertiesプロフィール
spring.application.name =バネboot- のRabbitMQ spring.rabbitmq.host = localhostを spring.rabbitmq.port = 5672 spring.rabbitmq.username = ナット spring.rabbitmq.password =ナット
Configurationクラス
その「注意-タイプの遅延Xおよび」「X -遅延メッセージ」
/ ** *延迟队列配置交換 * / @Configuration パブリック クラスDelayQueueConfig { パブリック 静的 最終列DELAY_EXCHANGE = "DELAY_EXCHANGE" 。 公共の 静的な 最終文字列DELAY_QUEUE =「DELAY_QUEUE」。 公共の 静的な 最終文字列DELAY_ROUTING_KEY =「DELAY_ROUTING_KEY」。 @Bean( "delayExchange" )、 公衆交換delayExchange(){ 地図の<string、オブジェクト>引数= 新規 HashMapの<>(1 )。 // キュー交換のx遅延型遅延宣言された型 args.put( " X-遅延型 "、 "ダイレクト" ); を返す 新しい新しい(DELAY_EXCHANGE、CustomExchange "X-遅延メッセージ"を、trueに、falseに、引数); } @Bean( "DelayQueue" ) パブリックキューDelayQueue(){ 戻りQueueBuilder.durable(DELAY_QUEUE).build(); } / ** *遅延スイッチroutingKeyによってキュー遅延に結合 * * @return * / @Bean 公衆delayQueueBindExchange結合(){ リターン 新しいバインディング(DELAY_QUEUE、Binding.DestinationType.QUEUE、DELAY_EXCHANGE、DELAY_ROUTING_KEY、ヌル); } }
プロデューサー
メッセージを送信すると、ミリ秒単位の遅延を指定します
/ ** *送信者の遅延キュー * / @Component @ SLF4J パブリック クラスDelayQueueSender { @Autowired プライベートRabbitTemplate rabbitTemplate; 公共 無効 sendDelayQueue(int型の数値){ log.warn( "送信遅延キュー:{}ミリ秒" 、ナンバー); / / Exchangeは、本明細書中、本明細書直接取引メッセージの不正メール配信されたテストを容易にするために、Exchangeサービスであってもよい rabbitTemplate.convertAndSend( DelayQueueConfig.DELAY_EXCHANGE、 DelayQueueConfig.DELAY_ROUTING_KEY、 番号、(メッセージ) - > { //ミリ秒の遅延を設定します message.getMessageProperties()setDelay(番号)。 log.info( "今:{}"、ZonedDateTime.now())。 リターン・メッセージ。 }); } }
消費者
/ ** *延迟队列消费者 * / @Component @ SLF4J @RabbitListener(キュー = DelayQueueConfig.DELAY_QUEUE) パブリック クラスDelayQueueConsumer { @RabbitHandler 公共 ボイドreceiveDelayMessage(整数ミリ秒){ log.warn(「DelayQueueConsumer時間:{}、およびミリ:{}」、ZonedDateTime.now()、ミリ秒)。 } }
テスト
最初のプロジェクトを開始します。
次に、テストクラスにメッセージを送信します。
@RunWith(SpringRunner。クラス) @SpringBootTest パブリック クラスRabbitmqApplicationTests { @Autowired プライベートDelayQueueSender delayQueueSender。 @Test 公共 ボイドtestDelayQueueSender(){ (delayQueueSender.sendDelayQueue 5000 )。 } }
メッセージウィンドウを送信します。
消費者は、メッセージが表示されます。
遅延間隔送信完了キューことを示します!
参考:
https://blog.csdn.net/linsongbin1/article/details/80178122
https://blog.csdn.net/youjin/article/details/82586888
https://docs.spring.io/spring-amqp/docs/2.0.0.M2/reference/htmlsingle/#delayed-message-exchange
https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/