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

问题描述 投票:0回答:2

我有一个带有 spring 集成的 Spring boot 项目。据我了解,它使用分散-聚集模式:

@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, 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, headers={gatherResultChannel=55774d05-e054-4b71-bc7e-ecc53d029e75:20, .... }]
[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 就会被销毁。我可以更改吗?

spring-integration
2个回答
2
投票

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

这是来自

HeaderChannelRegistry
:

的 UUID
if (channel instanceof MessageChannel) {
        String name = 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


0
投票

尝试增加 timeToLiveExpression

@Bean
  public IntegrationFlow verifyUtilityIntegrationFlow() {
    return IntegrationFlows.from(verifyUtilityHttpGateway())
      .enrichHeaders(h -> h.headerChannelsToString("200000"))
      .get();
  }
© www.soinside.com 2019 - 2024. All rights reserved.