Java 8 无法在Spring集成中将订阅服务器连接到BroadCastingDispatcher

Java 8 无法在Spring集成中将订阅服务器连接到BroadCastingDispatcher,java-8,spring-integration,spring-integration-dsl,spring-cloud-gcp,Java 8,Spring Integration,Spring Integration Dsl,Spring Cloud Gcp,在上的这个例子之后,我试图构建一个流程,在这个流程中,我从GooglePubSub订阅中读取内容,然后写入另一个主题 在DEBUG模式下启动我的应用程序后,我可以看到消息来自Google PubSub,但它们不会因此被“消费” o、 s.i.dispatcher.BroadcastingDispatcher:没有订阅者,默认行为为忽略 非常感谢您在这方面的任何帮助 下面是我的主要代码的样子- public class PubsubRouteBuilderService { privat

在上的这个例子之后,我试图构建一个流程,在这个流程中,我从GooglePubSub订阅中读取内容,然后写入另一个主题

DEBUG
模式下启动我的应用程序后,我可以看到消息来自
Google PubSub
,但它们不会因此被“消费”

o、 s.i.dispatcher.BroadcastingDispatcher:没有订阅者,默认行为为忽略

非常感谢您在这方面的任何帮助

下面是我的主要代码的样子-

public class PubsubRouteBuilderService {

    private final PubSubTemplate pubSubTemplate; // injected via Spring

    public PubsubRouteBuilderService(PubSubTemplate pubSubTemplate) {
        this.pubSubTemplate = pubSubTemplate;
    }

    public synchronized boolean buildRoute(PubsubRouteModel pubsubRouteModel) {
        log.info("Building route for: {}", pubsubRouteModel);
        buildPubsubRoute(pubsubRouteModel);
        // some unrelated logic
        return true;
    }

    private void buildPubsubRoute(PubsubRouteModel pubsubRouteModel) {

        final StandardIntegrationFlow standardIntegrationFlow = IntegrationFlows.from(
            RouteBuilderFactory
                    .messageChannelAdapter(
                            RouteBuilderFactory.getMessageChannel(),
                            pubSubTemplate,
                            pubsubRouteModel.getFromSub()))
            .handle(
                    message -> {
                        log.info("consumed new message: [" + message.getPayload() + "]");
                        AckReplyConsumer consumer = message.getHeaders()
                                .get(GcpPubSubHeaders.ORIGINAL_MESSAGE, AckReplyConsumer.class);
                        consumer.ack();
                    })
            .get();

        standardIntegrationFlow.start();
    }
}
以下是来自
RouteBuilderFactory
的其他方法-

public static MessageChannel getMessageChannel() {
    return MessageChannels.publishSubscribe().get();
}

public static PubSubInboundChannelAdapter messageChannelAdapter(MessageChannel inputChannel, PubSubTemplate pubSubTemplate, String channelName) {
    PubSubInboundChannelAdapter adapter = new PubSubInboundChannelAdapter(pubSubTemplate, channelName);
    adapter.setOutputChannel(inputChannel);
    adapter.setAckMode(AckMode.MANUAL);
    return adapter;
}

你的代码似乎根本不是基于那篇博文

private void buildPubSubcute(PubSubcuteModel PubSubcuteModel){
最终标准集成流标准集成流=集成流.from(
RouteBuilderFactory
.messageChannelAdapter(
RouteBuilderFactory.getMessageChannel(),
pubSubTemplate,
pubsubutemodel.getFromSub())
.处理(
信息->{
log.info(“已使用的新消息:[“+message.getPayload()+”]);
AckReplyConsumer consumer=message.getHeaders()
.get(GcpPubSubHeaders.ORIGINAL_消息,AckReplyConsumer.class);
consumer.ack();
})
.get();
standardIntegrationFlow.start();
}
您不能只是“启动”一些任意的
IntegrationFlow
对象,它必须由Spring管理(声明为
@Bean


框架在幕后构建了一些基础设施来完成所有这些工作。

您的代码似乎根本不是基于那篇博文的

private void buildPubSubcute(PubSubcuteModel PubSubcuteModel){
最终标准集成流标准集成流=集成流.from(
RouteBuilderFactory
.messageChannelAdapter(
RouteBuilderFactory.getMessageChannel(),
pubSubTemplate,
pubsubutemodel.getFromSub())
.处理(
信息->{
log.info(“已使用的新消息:[“+message.getPayload()+”]);
AckReplyConsumer consumer=message.getHeaders()
.get(GcpPubSubHeaders.ORIGINAL_消息,AckReplyConsumer.class);
consumer.ack();
})
.get();
standardIntegrationFlow.start();
}
您不能只是“启动”一些任意的
IntegrationFlow
对象,它必须由Spring管理(声明为
@Bean


框架在幕后构建了一些基础设施来完成所有这些工作。

我希望在不受Spring管理的情况下实现这些工作,因为我的用例需要动态启动和关闭路由(在应用程序运行时非常好)。你知道吗,如果没有
spring集成
,我会更好地尝试这个吗?在spring集成中,我们不称它们为“路由”;它们是流动。有关动态流注册,请参阅。在阅读了文档之后,简直不敢相信它会这么简单!我希望在不受Spring管理的情况下实现这一点,因为在我的用例中,我必须动态地启动和关闭路由(在应用程序运行时非常好)。你知道吗,如果没有
spring集成
,我会更好地尝试这个吗?在spring集成中,我们不称它们为“路由”;它们是流动。有关动态流注册,请参阅。在阅读了文档之后,简直不敢相信它会这么简单!