Mongo 使用 HTTP 输入网关的消息聚合存储导致堆栈溢出

Mongo Message aggregate store with HTTP input gateway results in stack overflow

我有一个由 HTTP 输入激活器激活的异步拆分聚合器 spring-集成 (4.1.4.RELEASE) 流。聚合器由 org.springframework.integration.mongodb.store.MongoDbMessageStore.

支持

新的要求也为其提供了一个替代的同步流程。这是通过投入 HTTP 输入网关和 2 个路由器来短路任务执行器并在同步调用的情况下将输出发送到正确的通道来实现的。

测试立即被以下堆栈跟踪破坏。调试问题表明,以下问题的持久性是根本原因: class org.springframework.messaging.core.GenericMessagingTemplate$TemporaryReplyChannel ==> class java.util.concurrent.CountDownLatch ==> class java.util.concurrent.CountDownLatch$Sync ==> class java.util.concurrent.locks.AbstractQueuedSynchronizer$节点==> class java.lang.Thread ==> class java.lang.Thread组==> class java.lang.ClassLoader ...

此时我通过删除持久性解决了这个问题,但是出于故障转移目的需要它。我有哪些选择?

非常感谢

    Caused by: java.lang.WhosebugError
        at sun.reflect.generics.parser.SignatureParser.parsePackageNameAndSimpleClassTypeSignature(SignatureParser.java:330)
        at sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature(SignatureParser.java:312)
        at sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:291)
        at sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:285)
        at sun.reflect.generics.parser.SignatureParser.parseTypeSignature(SignatureParser.java:487)
        at sun.reflect.generics.parser.SignatureParser.parseZeroOrMoreTypeSignatures(SignatureParser.java:610)
        at sun.reflect.generics.parser.SignatureParser.parseFormalParameters(SignatureParser.java:587)
        at sun.reflect.generics.parser.SignatureParser.parseMethodTypeSignature(SignatureParser.java:577)
        at sun.reflect.generics.parser.SignatureParser.parseMethodSig(SignatureParser.java:173)
        at sun.reflect.generics.repository.ConstructorRepository.parse(ConstructorRepository.java:55)
        at sun.reflect.generics.repository.ConstructorRepository.parse(ConstructorRepository.java:43)
        at sun.reflect.generics.repository.AbstractRepository.<init>(AbstractRepository.java:74)
        at sun.reflect.generics.repository.GenericDeclRepository.<init>(GenericDeclRepository.java:48)
        at sun.reflect.generics.repository.ConstructorRepository.<init>(ConstructorRepository.java:51)
        at sun.reflect.generics.repository.ConstructorRepository.make(ConstructorRepository.java:69)
        at java.lang.reflect.Constructor.getGenericInfo(Constructor.java:90)
        at java.lang.reflect.Constructor.getGenericParameterTypes(Constructor.java:245)
        at org.springframework.data.util.TypeDiscoverer.getParameterTypes(TypeDiscoverer.java:161)
        at org.springframework.data.util.ParentTypeAwareTypeInformation.getParameterTypes(ParentTypeAwareTypeInformation.java:28)
        at org.springframework.data.mapping.model.PreferredConstructorDiscoverer.buildPreferredConstructor(PreferredConstructorDiscoverer.java:103)
        at org.springframework.data.mapping.model.PreferredConstructorDiscoverer.<init>(PreferredConstructorDiscoverer.java:74)
        at org.springframework.data.mapping.model.BasicPersistentEntity.<init>(BasicPersistentEntity.java:92)
        at org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity.<init>(BasicMongoPersistentEntity.java:74)
        at org.springframework.data.mongodb.core.mapping.MongoMappingContext.createPersistentEntity(MongoMappingContext.java:91)
        at org.springframework.data.mongodb.core.mapping.MongoMappingContext.createPersistentEntity(MongoMappingContext.java:39)
        at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:279)
        at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:469)
        at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:426)
        at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:604)
        at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:294)
        at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.createAndRegisterProperty(AbstractMappingContext.java:469)
        at org.springframework.data.mapping.context.AbstractMappingContext$PersistentPropertyCreator.doWith(AbstractMappingContext.java:426)
        at org.springframework.util.ReflectionUtils.doWithFields(ReflectionUtils.java:604)

无论如何你都必须分享你的配置。

尽管我认为 <header-channels-to-string><header-enricher> 之前 <aggregator> 可能会对您有所帮助。因为默认情况下我们将 Message<?> 序列化为 ConfigurableMongoDbMessageStoreTemporaryReplyChannel header 不是 Serializable.

有关详细信息,请参阅 Header Channel Registry