gpt4 book ai didi

java - 如何正确实现 Binder ?

转载 作者:行者123 更新时间:2023-12-02 10:12:14 25 4
gpt4 key购买 nike

在与 Oleg 讨论期间对问题进行了大量编辑

我正在尝试在 Spring Cloud Stream 中实现 BigQuery 的绑定(bind)器。

完整的应用程序代码可在GitHub上获取.

到目前为止,我已经写了 BigQueryBinderConfiguration返回 BigQueryBinder 的类以下方式

@Configuration @EnableConfigurationProperties({ BigQueryConfiguration.class })
public class BigQueryBinderConfiguration {
@Autowired BigQueryConfiguration configuration;

@Bean
BigQueryBinder bigQueryMessageChannelBinder(BigQueryConfiguration configuration, BigQueryProvisioningProvider provisioningProvider) {

return new BigQueryBinder(configuration, provisioningProvider);
}

@Bean BigQueryProvisioningProvider provisioningProvider() {
return new BigQueryProvisioningProvider(configuration);
}
}

我的问题是,当这样做时,我的其他 Binder (Rabbit 和 Kafka)不再被识别。

我的测试协议(protocol)如下:我启动我的应用程序,并在rabbitmq管理界面中检查我的应用程序是否注册为消费者。当此代码未注释时,情况并非如此。

调试调用 bigQueryMessageChannelBinder(....) 时,我观察到以下几点。

DefaultBinderFactory#getBinder(...)方法始终返回我的 BigQueryBinder 实例。调试表明调用 this.context.getBeansOfType(Binder.class); 返回一个仅包含我的 BigQueryBinder 的列表。我很困惑,因为其他绑定(bind)器在我的类路径中,如果我删除工厂方法 BigQueryBinderConfiguration#bigQueryMessageChannelBinder(....) ,一切正常。

我在调试过程中发现DefaultBinderFactory是用于将绑定(bind)程序与配置名称关联的类。我还发现 Binder 实现不应出现在 Map<String, Binder> binders 中。但不幸的是,我的 Binder 实现出现在该列表中。我想这与 bean 的性质有关。但如何呢?

最佳答案

我认为您能做的最好的事情就是先看看我们的新 TestChannelBinder.java 。基本上它是一个由 Spring Integration 支持的完整的 Binder 。换句话说,Spring Integration 及其 channel 扮演着消息代理的角色,就像 Rabbit、Kafka、GCP 和其他绑定(bind)器一样。这个 Binder 的重要之处在于,它有效地展示了实现功能 Binder 所需的最低限度的要求。

关于java - 如何正确实现 Binder ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54921839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com