SpringBoot 에서 RabbitMq 정시 퀘 스 트 실현
3627 단어 SpringBootRabbitMq정시 임무
정시 퀘 스 트 필드:주문서 아래 15 분 미 지불 자동 종료
지연 작업 실현 원리 도 는 다음 과 같다.
위의 그림 에서 보 듯 이 우 리 는 두 개의 대기 열(하 나 는 수신 대기 열,메 시 지 는 안에서 TLL 시간 을 보 내 는 것,다른 하 나 는 처리 대기 열,메 시 지 는 TLL 시간 을 보 낸 후에 이 대기 열 에 들 어 가 는 것)이 필요 하 다.두 개의 교환기 와 경로(하 나 는 메 시 지 를 수신 대기 열 에 보 내 는 것,다른 하 나 는 메 시 지 를 수신 대기 열 에서 처리 대기 열 로 보 내 는 것)가 필요 하지만 교환 기 는 같은 것 을 사용 할 수 있다.즉,하나의 교환기 가 두 개의 길 을 조합 하 는 방식 이다.
다음은 코드 구현 과정 입 니 다.
// rabbitAdmin
@Bean
public RabbitAdmin rabbitAdmin(CachingConnectionFactory cachingConnectionFactory){
RabbitAdmin rabbitAdmin = new RabbitAdmin(cachingConnectionFactory);
rabbitAdmin.setIgnoreDeclarationExceptions(true);
return rabbitAdmin;
}
그 다음 대기 열 교환기 및 바 인 딩 성명(Queue,Exchange,Binding)
@Autowired
RabbitAdmin rabbitAdmin;
/**
* , ,TLL
* @param queueName
* @param delayExchange
*/
public void createDelayQueue(String queueName,String delayExchange,String delayRoutingKey){
Map<String, Object> map = new HashMap<>();
/** **/
map.put("x-dead-letter-exchange", delayExchange);
map.put("x-dead-letter-routing-key", delayRoutingKey);
rabbitAdmin.declareQueue(new Queue(queueName,true,false,false,map));
}
/**
*
* @param queueName
*/
public void createQueue(String queueName){
rabbitAdmin.declareQueue(new Queue(queueName,true,false,false,new HashMap<>()));
}
/**
* ,
* @param name
*/
public void createExchange(String name){
rabbitAdmin.declareExchange(new DirectExchange(name,true,false));
}
/**
*
* @param queueName
* @param delayExchange
* @param routeKey
*/
public void bindQueue(String queueName,String delayExchange,String routeKey){
rabbitAdmin.declareBinding(new Binding(queueName,Binding.DestinationType.QUEUE,delayExchange,routeKey,new HashMap<>()));
}
/**
*
* @param message
* @param exchange
* @param routeKey
* @param tll
*/
public void sendMessageWithTll(String message,String exchange,String routeKey,String tll){
rabbitAdmin.getRabbitTemplate().convertAndSend(exchange, routeKey, message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setExpiration(tll);
return message;
}
});
}
@Override
public void sendMessage(String message, String exchange, String routeKey) {
rabbitAdmin.getRabbitTemplate().convertAndSend(exchange, routeKey, message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
return message;
}
});
}
테스트 를 진행 하 다
/**
*
* @param message
* @return
*/
@RabbitListener(queues = "consumerQueue")
public void getMessage(String message){
System.out.println(" getMessage:"+message +",time="+MyUtil.FormatDate(new Date()));
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.