遅延キューSpringBoot RabbitMQのためのコード

シーン

支払われていない場合は、単一のユーザー、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/

 

おすすめ

転載: www.cnblogs.com/theRhyme/p/10986409.html
おすすめ