지연 큐 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 = 스프링 부팅이 rabbitmq 
spring.rabbitmq.host = 로컬 호스트 
spring.rabbitmq.port = 5672 
spring.rabbitmq.username = 너트 
spring.rabbitmq.password = 너트

 

구성 클래스

그 "참고 X를 - 지연의 유형 "과 " 는 X - 지연 메시지를 "

/ ** 
 *延迟队列配置교환 
 * / 
@Configuration 
공공  클래스 DelayQueueConfig { 

    공공  정적  최종 문자열 DELAY_EXCHANGE = "DELAY_EXCHANGE" ;
    공공  정적  최종 문자열 DELAY_QUEUE = "DELAY_QUEUE" ;
    공공  정적  최종 문자열 DELAY_ROUTING_KEY = "DELAY_ROUTING_KEY" ; 

    @Bean ( "delayExchange" )
     공공 교환 delayExchange () { 
        지도 <문자열, 개체> 인수 = 새로운 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, 널 (null) ); 
    } 

}

 

생산자

메시지를 보낼 때, 밀리 초 단위의 지연 시간을 지정합니다

/ ** 
 * 보낸 사람 지연 큐 
 * / 
@Component 
@ SLF4J 
공공  클래스 DelayQueueSender { 

    @Autowired 
    개인 RabbitTemplate rabbitTemplate; 

    공공  무효 sendDelayQueue ( INT의 수) { 
        log.warn ( "전송 지연 대기열 : {} 밀리 초" , 수)
         / / 환 본원 명세서 직접 Exchange 메시지 BADMAIL 전달 된 테스트 용이하게하기 위해, 교환 서비스 일 수있다 
        rabbitTemplate.convertAndSend ( 
                DelayQueueConfig.DELAY_EXCHANGE, 
                DelayQueueConfig.DELAY_ROUTING_KEY, 
                번호, (메시지) -> { 
                    // 밀리 초 지연을 설정
                    message.getMessageProperties () setDelay (번호).; 
                    ( "이제 {}", ZonedDateTime.now ()) log.info; 
                    반환 메시지를; 
                } ); 
    } 
}

 

소비자

/ ** 
 *延迟队列消费者
 * / 
@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