是否可以针对特定方法禁用spring-cloud-stream的功能绑定?

布莱恩:

我有一个基于Spring Boot的库(使用spring-data-mongo),它创建一个PersistentEntitiesbean。PersistentEntities碰巧实现了该Supplier<T>接口,因此Spring Cloud Stream功能绑定器正在为其创建绑定。更具体地说,将其BeanFactoryAwareFunctionRegistry.discoverDefaultDefinitionIfNecessary查找为type的bean Supplier

我们使用的是Spring Cloud Streams Kafka活页夹,因此Spring尝试将每个对象发布到它创建的Kafka主题。这会在JSON序列化程序中引起无限递归问题:

2019-12-04 15:36:54.323错误1--[schedule-1] osihLoggingHandler:org.springframework.messaging.MessagingException:无法调用方法; 嵌套异常是org.springframework.messaging.converter.MessageConversionException:无法编写JSON:无限递归(StackOverflowError)(通过引用链:org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity [“ idProperty”]-> org。 springframework.data.mongodb.core.mapping.CachingMongoPersistentProperty [“所有者”]-> org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity [“ idProperty”]-> org.springframework.data.mongodb.core.mapping。 CachingMongoPersistentProperty [“ owner”]-> org.springframework.data.mongodb.core.mapping.BasicMongoPersistentEntity [“ idProperty”]-> org。

有没有办法从函数绑定中排除我的bean?使用该库的项目没有使用Spring Cloud Function,但是我更愿意保持这种可能性。

供参考,我的bean定义为:

@Bean
public PersistentEntities myPersistentEntities(List<MongoTemplate> mongoTemplates) {
    return new PersistentEntities(() -> {
        List<MappingContext<?, ?>> mappingContexts = mongoTemplates.stream().map(t -> t.getConverter().getMappingContext()).collect(Collectors.toList());
        return mappingContexts.iterator();
    });
}

我们刚刚将Spring Cloud从格林威治升级到Hoxton,因此自动功能绑定对我们来说是新的。

奥列格·朱拉库斯基(Oleg Zhurakousky):

通常,您可以通过将Spring-cloud-function明确排除为

@SpringBootApplication(exclude = ContextFunctionCatalogAutoConfiguration.class)

也就是说,请提出一个问题-https: //github.com/spring-cloud/spring-cloud-stream/issues以前已经出现过各种变化,我开始相信我们需要比上述更好的解决方案。

另一个解决方法是显式指定不存在的spring.cloud.function.definition=blah属性blah丑陋,但是可以解决问题,并且由于不涉及任何注释或其他属性,因此不需要重新编译。

但是正如我所说,请提出一个问题,链接到此帖子,我们将在今年年底之前针对SR1解决该问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Spring Cloud Stream 3.x的新功能绑定样式设置拆分器?

Spring Cloud Stream + Google Pub / Sup:功能绑定不令人担忧

Spring Cloud Stream Kafka绑定程序是否可以允许/拒绝重试特定例外?

Spring Cloud Stream 绑定可视化

如何出于开发目的禁用Spring Cloud Stream绑定?

Spring Cloud Stream多种功能定义

在 Spring Cloud Stream (RabbitMQ) 中以编程方式声明绑定?

Rabbit Spring Cloud Stream将主题绑定到单个队列

如何使用 Spring Cloud Stream 和 Kafka 绑定 Store?

Spring Cloud Stream Kafka Binder 中的 1 个输出绑定

Spring Cloud功能Webflux + Spring Cloud Stream是否与http源集成

Spring Cloud Stream禁用重试

是否可以在Spring Cloud Stream Starter应用程序上禁用安全性?

Spring Cloud Stream供应商功能模型

具有扩展绑定属性的 Spring Cloud Stream 自定义绑定器

是否可以在Spring Cloud Stream中为同一处理器配置多个绑定?

当您可以使用Spring Cloud Task时,为什么要使用Spring Cloud Stream与kafka / rabbitmq绑定?

Spring Cloud Stream RabbitMQ

Spring Cloud Stream验证

Spring Cloud Stream + Quartz

禁用Spring Cloud Stream Rabbit进行测试

是否可以使方法(处理程序)从Spring Cloud Stream中的多个入站通道接收消息?

是否可以在Spring Cloud Stream Kafka Streams 3.0 Binder样式API方法上使用@KafkaStreamsStateStore批注?

Spring Cloud Stream Kafka仅将标头添加到一个绑定中

使用Spring Cloud Stream将RabbitMQ使用者绑定到现有队列

Spring Cloud Stream 中每个绑定的自定义密钥 serdes

将多个RabbitMQ交换绑定到单个队列会在Spring Cloud Stream中引发错误

spring功能绑定将多个输入命名为spring cloud中的一个输出

是否可以仅针对特定文件忽略php.ini中的禁用功能?