当前位置: 首页 > 知识库问答 >
问题:

Spring集成路由无法发送消息

江光明
2023-03-14

所以,问题在于路由器。当路由器尝试向通道发送消息时,我会收到错误:Dispatcher没有通道“newTypingNotificationHandler”的订户。输入'。但我有这个频道名称的集成流防御。

@Bean
public IntegrationFlow routeEcmIncomeRq(AbstractMessageRouter typeNotificationRouter) {
    return IntegrationFlows.from(FROM_CHANNEL)
            .routeToRecipients(r -> r
                    .recipientFlow(p -> p instanceof TypingNotificationDto,
                            f -> f.route(typeNotificationRouter)
                    )
                    .defaultOutputChannel(DEFAULT_SERVICE_CHANNEL)
            ).get();
}

@Bean
public AbstractMessageRouter typeNotificationRouter(IncomeRepository incomeRepository) {
    return new AbstractMessageRouter() {
        @Override
        protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
            TypingNotificationDto messagePayload = (TypingNotificationDto) message.getPayload();

            if (!incomeRepository.existsById(StringUtil.ecdFileIdToUuid(messagePayload.getEcdDocumentImage().getDocumentSource()))) {
                return Collections.singleton(MessageChannels.direct("newTypingNotificationHandler.input").get());
            } else {
                return Collections.singleton(MessageChannels.direct("existsTypingNotificationHandler.input").get());
            }
        }
    };
}

@Bean
public IntegrationFlow newTypingNotificationHandler() {
    return f -> f.log("need's create new Income");
}

@Bean
public IntegrationFlow existsTypingNotificationHandler() {
    return f -> f.log("exist income process");
}

原因:

org.springframework.integration.MessageDispatching异常:调度器在org.springframework.integration.dispatcher.UnicastingDispatcher.do调度(UnicastingDispatcher.java:139)没有订户~[Spring-集成-core-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:106)~[Spring-集成-core-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org.springframework.integration.channel.AbstractSubcribableChannel.do发送(AbstractSubcribableChannel.java:73)~[Spring-集成-core-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:461)~[Spring-集成-core-5.2.6. RELEASE. jar: 5.2.6.发布]在org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:403)~[sping-整合-core-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org.springframework.messaging.core.GenericMessagingTemplate.do发送(GenericMessagingTemplate.java:187)~[sping-Message-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org.springframework.messaging.core.GenericMessagingTemplate. do发送(GenericMessagingTemplate. java: 166)~[sping-Message-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org. springframework. core. GenericMessagingTemplate-5.2.6. RELEASE. jar: 5.2.6. RELEASE]在org. springframework. mail. core. AbstractMessageSendingTemplate.发送(AbstractMessageSendingTemplate. java: 109)~[sping-Message-5.2.6.

共有1个答案

王庆
2023-03-14

您每次都返回一个新频道,而不是Spring管理的频道

MessageChannels.direct("newTypingNotificationHandler.input").get();

使用

return Collections.singleton(getChannelResolver().resolveDestination("newTypingNotificationHandler.input"));

相反。但是,最好在解析后缓存,而不是为每个消息返回一个新的集合。

 类似资料:
  • 我是Spring集成的新手,正在研究一个从单个通道向多个通道发送消息的示例,从这个角度来看,为每个通道使用Redis消息存储,目的是不丢失任何消息。要求将消息发送到通道-replyChannel、mailChannel和dbChannel。目前,代码只打印sysout语句,没有主要功能。 为了检查消息是否被正确路由,我编写了一个java测试类来发送15条消息。 检查输出,我发现一些消息正在丢失。也

  • 基于spring集成的转换器使用来自一个系统的消息,检查、转换并将其发送到另一个系统。 如果目标系统关闭,我们将停止入站适配器,但也希望在本地保留或转发当前“正在运行”的转换消息。为此,只需将消息从正常输出通道动态地重新路由到某个“备份”通道。 在文档中,我只找到了根据消息头路由消息的选项(因此,在流程之前的某个步骤中,一旦targer系统不可用,我将不得不动态添加这些消息),或者基于有效负载类型

  • 我的机器人不能发送嵌入或常规文本信息,代码执行,但没有什么是发送在不和谐的通道。我遵循了JDA维基的设置,我不知道我做错了什么。 机器人登录码

  • 我阅读了关于用户目的地的Spring文档。我想使用方法仅向特定用户发送消息。 这是java代码: 这是客户端js代码: 首先,考虑用户价值是否正确? StampClient.connect("myuser",... 为什么这个测试不起作用?此用户未收到任何消息。如果我将目的地切换到,并将方法更改为,这将起作用,但显然是作为广播,而不仅仅是根据请求发送给特定用户。 我试图设置一个回复单用户与此代码:

  • 我有一个camel-spring-boot应用程序,有几条路由。我现在要集成测试其中的一条路由。 这给我出问题了。如果我在测试中初始化了Spring Boot应用程序,那么所有的路由都会自动加载。属性从我的.yml文件中正确读取。

  • 使用Spring Integration Kafka,使用出站通道适配器,我尝试向名为“test”的主题发送消息 通过命令行终端,我启动了动物园管理员、kafka并创建了名为“test”的主题 Spring XML配置 JUnit测试代码 测试用例成功,在调试时,我发现channel.send()返回true 我使用下面的命令通过命令行检查了主题,但是我在测试主题中看不到任何消息。 bin/kaf