Spring Cloud Stream-应用程序初始化后发送消息

我正在尝试使用“春季云流”向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)

但是,如果我增加了一些延迟,则在发送消息之前(仅几秒钟或几秒钟),它可以正常工作。我的问题是:如何在spring完全初始化消息通道然后发送消息之前等待?

回答:

@PostConstruct太早触发(在创建配置Bean时,但是在上下文启动并进行绑定之前)。您想要的是一旦上下文完全初始化,或者至少在绑定了输出通道之后,触发消息的发送。

您有几个选择,所有选择都依赖于其他bean的创建:

  1. 要使用SmartLifecycle来自Spring 的支持(请确保默认情况下isAutoStartup返回true,并且相位为零(默认值),以便在绑定输出之后启动Bean)。

  2. 使用ApplicationListenerContextRefreshedEvent

  3. 由于这是一个Spring Boot应用程序,因此您可以使用ApplicationRunnerBean(在创建上下文之后调用它)。

以上是 Spring Cloud Stream-应用程序初始化后发送消息 的全部内容, 来源链接: utcz.com/qa/427116.html

回到顶部