[SPRING] Spring 클라우드 스트림 - 애플리케이션 초기화 후 메시지 보내기
SPRINGSpring 클라우드 스트림 - 애플리케이션 초기화 후 메시지 보내기
저는 "봄철 구름의 물줄기"를 사용하여 간단한 메시지를 rabbitmq에게 보내려고합니다. 기본적으로 코드는 다음과 같습니다.
@EnableBinding(Source.class)
@SpringBootApplication
public class SourceApplication {
public static void main(String[] args) {
SpringApplication.run(SourceApplication.class, args);
}
@Autowired Source source;
@PostConstruct
public void init() {
source.send(MessageBuilder.withPayload("payload").build());
}
}
다음이 오류 메시지가 나타납니다.
org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'unknown.channel.name'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers, failedMessage=GenericMessage [payload=******, headers={id=c60dd5be-6576-99d5-fd1b-b1cb94c191c1, timestamp=1488651422892}]
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:93)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373)
그러나 메시지를 전송하기 전에 지연 시간을 추가하면 (몇 초 또는 몇 초) 괜찮습니다. 제 질문은 : 봄이 메시지 채널을 완전히 초기화하고 메시지를 보내기 전에 어떻게 기다릴 수 있습니까?
해결법
-
==============================
1.@PostConstruct가 너무 일찍 트리거됩니다 (구성 빈이 작성되었지만 컨텍스트가 시작되고 바인딩이 수행되기 전). 원하는 것은 컨텍스트가 완전히 초기화되었거나 출력 채널이 바인딩 된 후에 메시지 보내기를 트리거하는 것입니다.
@PostConstruct가 너무 일찍 트리거됩니다 (구성 빈이 작성되었지만 컨텍스트가 시작되고 바인딩이 수행되기 전). 원하는 것은 컨텍스트가 완전히 초기화되었거나 출력 채널이 바인딩 된 후에 메시지 보내기를 트리거하는 것입니다.
추가 빈을 만드는 데 의존하는 몇 가지 옵션이 있습니다.
-
==============================
2.Spring의 Task Execution and Scheduling 기능을 살펴볼 수있다.
Spring의 Task Execution and Scheduling 기능을 살펴볼 수있다.
특히 34.4 절에서 다루는 것과 같은 것을 원한다는 느낌을줍니다.
또한 비슷한 질문에 대한 답을 찾아 냈습니다.
from https://stackoverflow.com/questions/42599942/spring-cloud-stream-send-message-after-application-initalization by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 / JTA / JPA DAO 통합 테스트가 롤백되지 않습니까? (0) | 2019.05.11 |
---|---|
[SPRING] RequestContextHolder와 같은 Response의 홀더 클래스가없는 이유는 무엇입니까? (0) | 2019.05.11 |
[SPRING] 스프링 보안 : @PreAuthorize에서 Hibernate 엔티티 매개 변수에 액세스 할 수없는 이유는 무엇입니까? (0) | 2019.05.11 |
[SPRING] 스프링 컨트롤러 메소드에서 @ Valid / @ Validated 주석 이전에 내 Spring 요소를 실행하려면 어떻게해야합니까? (0) | 2019.05.11 |
[SPRING] AuthenticationProvider에서 발생하는 잡기 예외 (0) | 2019.05.11 |