春季集成-无法在BeanFactory中查找名称为'55774d05-e054-4b71-bc7e-ecc53d029e75:20'的MessageChannel

问题描述

我有一个带有spring-integration的Spring boot项目。据我了解,它使用了Scatter-Gather模式:

@Bean
public IntegrationFlow getClientsFlow() {
    return IntegrationFlows.from(FIND_CLIENTS_INPUT_CHANNEL_NAME)
            .transform(inputMessageConfigurer())
            .scatterGather(
                scatterer -> scatterer.applySequence(true)
                    .recipient(ONE_FLOW_CHANNEL_NAME)
                    .recipient(TWO_FLOW_CHANNEL_NAME),gatherer -> gatherer
                    .releaseStrategy(
                            new MessageCountReleaseStrategy(2))
                    .messageStore(new SimpleMessageStore()).outputProcessor(messageGroup -> {
                        List<TWOClient> twoClients = getMessagePayloadWithType(messageGroup,TWO_MESSAGE_TYPE);
                        List<ONEClientAccount> oneClientAccounts = getMessagePayloadWithType(
                                messageGroup,ONE_MESSAGE_TYPE);
                        ClientAggregator aggregator = new ClientAggregator(twoClients,oneClientAccounts);
                        return MessageBuilder.withPayload(aggregator.aggregateClients())
                                .copyHeaders(messageGroup.getone().getHeaders()).build();
                    }))
            .get();
}

它工作正常,但有时日志中有错误

[17.08.20 10:53:51:724 SAMT] 00000373 LoggingHandle I org.springframework.integration.handler.LoggingHandler handleMessageInternal Genericmessage [payload=<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:searchResult
...
</ns2:searchResult>,headers={gatherResultChannel=55774d05-e054-4b71-bc7e-ecc53d029e75:20,sequenceDetails=[[0f92a717-b48b-bb4b-ee44-c1198b7301ed,0]],... }]

[17.08.20 10:54:17:916 SAMT] 00000373 LoggingHandle E org.springframework.integration.handler.LoggingHandler handleMessageInternal [Request id: e13472c747b64e299f627ba541e6b367] - Failed to look up MessageChannel with name '55774d05-e054-4b71-bc7e-ecc53d029e75:20' in the beanfactory.; nested exception is org.springframework.beans.factory.NoSuchBeanDeFinitionException: No bean named '55774d05-e054-4b71-bc7e-ecc53d029e75:20' available
[17.08.20 10:54:17:916 SAMT] 00000373 SystemErr     R org.springframework.messaging.MessagingException: Failed to handle Message; nested exception is org.springframework.messaging.core.DestinationResolutionException: Failed to look up MessageChannel with name '55774d05-e054-4b71-bc7e-ecc53d029e75:20' in the beanfactory.; nested exception is org.springframework.beans.factory.NoSuchBeanDeFinitionException: No bean named '55774d05-e054-4b71-bc7e-ecc53d029e75:20' available,FailedMessage=Genericmessage,.... }]
[17.08.20 10:54:17:918 SAMT] 00000373 SystemErr     R   at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:76)
[17.08.20 10:54:17:918 SAMT] 00000373 SystemErr     R   at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:64)
[17.08.20 10:54:17:918 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.GenericmessagingTemplate.doSend(GenericmessagingTemplate.java:181)
[17.08.20 10:54:17:918 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.GenericmessagingTemplate.doSend(GenericmessagingTemplate.java:160)
[17.08.20 10:54:17:918 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.GenericmessagingTemplate.doSend(GenericmessagingTemplate.java:47)
[17.08.20 10:54:17:919 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)
[17.08.20 10:54:17:919 SAMT] 00000373 SystemErr     R   at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:426)
[17.08.20 10:54:17:919 SAMT] 00000373 SystemErr     R   at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:336)
[17.08.20 10:54:17:919 SAMT] 00000373 SystemErr     R   at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:227)
[17.08.20 10:54:17:919 SAMT] 00000373 SystemErr     R   at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.completeGroup(AbstractCorrelatingMessageHandler.java:747)
[17.08.20 10:54:17:919 SAMT] 00000373 SystemErr     R   at org.springframework.integration.aggregator.AbstractCorrelatingMessageHandler.handleMessageInternal(AbstractCorrelatingMessageHandler.java:439)
[17.08.20 10:54:17:920 SAMT] 00000373 SystemErr     R   at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
[17.08.20 10:54:17:920 SAMT] 00000373 SystemErr     R   at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:70)
[17.08.20 10:54:17:920 SAMT] 00000373 SystemErr     R   at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:64)
[17.08.20 10:54:17:920 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.GenericmessagingTemplate.doSend(GenericmessagingTemplate.java:181)
[17.08.20 10:54:17:920 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.GenericmessagingTemplate.doSend(GenericmessagingTemplate.java:160)
[17.08.20 10:54:17:920 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.GenericmessagingTemplate.doSend(GenericmessagingTemplate.java:47)
...
[17.08.20 10:54:17:972 SAMT] 00000373 SystemErr     R Caused by: org.springframework.messaging.core.DestinationResolutionException: Failed to look up MessageChannel with name '55774d05-e054-4b71-bc7e-ecc53d029e75:20' in the beanfactory.; nested exception is org.springframework.beans.factory.NoSuchBeanDeFinitionException: No bean named '55774d05-e054-4b71-bc7e-ecc53d029e75:20' available
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.integration.support.channel.beanfactoryChannelResolver.resolveDestination(beanfactoryChannelResolver.java:117)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.integration.support.channel.beanfactoryChannelResolver.resolveDestination(beanfactoryChannelResolver.java:46)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.AbstractDestinationResolvingMessagingTemplate.resolveDestination(AbstractDestinationResolvingMessagingTemplate.java:76)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.messaging.core.AbstractDestinationResolvingMessagingTemplate.send(AbstractDestinationResolvingMessagingTemplate.java:69)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.integration.scattergather.ScatterGatherHandler.lambda$doInit$0(ScatterGatherHandler.java:120)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.integration.scattergather.ScatterGatherHandler$$Lambda$496/000000002B45D160.handleMessage(UnkNown Source)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   at org.springframework.integration.channel.FixedSubscriberChannel.send(FixedSubscriberChannel.java:70)
[17.08.20 10:54:17:973 SAMT] 00000373 SystemErr     R   ... 277 more
[17.08.20 10:54:17:974 SAMT] 00000373 SystemErr     R Caused by: org.springframework.beans.factory.NoSuchBeanDeFinitionException: No bean named '55774d05-e054-4b71-bc7e-ecc53d029e75:20' available
[17.08.20 10:54:18:002 SAMT] 00000373 SystemErr     R   at org.springframework.beans.factory.support.DefaultListablebeanfactory.getBeanDeFinition(DefaultListablebeanfactory.java:688)
[17.08.20 10:54:18:002 SAMT] 00000373 SystemErr     R   at org.springframework.beans.factory.support.Abstractbeanfactory.getMergedLocalBeanDeFinition(Abstractbeanfactory.java:1218)
[17.08.20 10:54:18:003 SAMT] 00000373 SystemErr     R   at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:291)
[17.08.20 10:54:18:003 SAMT] 00000373 SystemErr     R   at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:204)
[17.08.20 10:54:18:003 SAMT] 00000373 SystemErr     R   at org.springframework.integration.support.channel.beanfactoryChannelResolver.resolveDestination(beanfactoryChannelResolver.java:89)
[17.08.20 10:54:18:003 SAMT] 00000373 SystemErr     R   ... 283 more

错误的原因可能是什么? 可能有超时之后,销毁了bean。我可以更改它吗?

解决方法

55774d05-e054-4b71-bc7e-ecc53d029e75:20

这是来自HeaderChannelRegistry的UUID:

if(MessageChannel的通道实例){ 字符串名称= this.uuid + id.incrementAndGet();

您的配置中似乎有一些标题富集器,其功能如下:

/**
 * Add header specifications to automatically convert header channels (reply,error
 * channels) to Strings and store them in a header channel registry. Allows
 * persistence and serialization of messages without losing these important framework
 * headers.
 * @param timeToLiveExpression the minimum time that the mapping will remain in the registry.
 * @return the header enricher spec.
 * @see org.springframework.integration.support.channel.HeaderChannelRegistry
 */
public HeaderEnricherSpec headerChannelsToString(String timeToLiveExpression) {

因此,您是对的:replyChannel标头中有一个超时将从注册表中删除这些条目,而这对于您的逻辑而言还不够。

尽管不清楚您是否仍然需要headerChannelsToString()选项。

有关更多信息,请参阅文档:https://docs.spring.io/spring-integration/docs/current/reference/html/message-transformation.html#header-channel-registry

,

试试这个增加 timeToLiveExpression

@Bean
  public IntegrationFlow verifyUtilityIntegrationFlow() {
    return IntegrationFlows.from(verifyUtilityHttpGateway())
      .enrichHeaders(h -> h.headerChannelsToString("200000"))
      .get();
  }