我有一个微服务,它使用自定义绑定器、
CustomBinderA
和声明性方法。在代码中,您可以找到几个带注释的类,例如@EnableBinding
、@Input
、@StreamListener
等。一切正常。
最近,我实现了另一个活页夹,
CustomBinderB
,并使用最新的功能方法在不同的微服务上对其进行了测试,一切也都运行良好。
现在,我尝试将新的绑定器集成到以前的微服务中,同时仍然保留旧的绑定器。每个配置点都已启用,一切都应该正常。但是,我注意到只有显式声明的绑定(即带有
@Input
注释的绑定)才会被实例化。
所以,我唯一想弄清楚的是:函数式方法和声明式方法是否可以一起工作,或者是否有某种方式,如果使用
@EnableBinding
,与函数式方法相关的属性将被忽略?
我尝试使用多绑定器方法组合这两种配置。
spring:
cloud
stream:
function:
definition: createOrderConsumer
binders:
CustomBinderB:
type: custom-binder-b
CustomBinderA:
type: custom-binder-a
...
bindings:
createOrderConsumer-in-0:
destination: createOrder
binder: CustomBinderB
outbox:
destination: notifyOrder
binder: CustomBinderA
inbox:
destination: inbox
binder: CustomBinderA
我希望每个可绑定通道都被实例化。
但是,只有“收件箱”和“发件箱”通道被实例化,这是使用 @Input 和 @Output 注释显式声明的通道。
EnableBinding
和所有相关组件,例如 Input
和 Output
等,现已弃用一段时间,并从框架的最新版本中完全删除(从 4.0.0
开始)。因此,我们强烈建议您停止在应用程序中使用EnableBinding
,并完全迁移到函数式风格。如果您使用的 Spring Cloud Stream 版本仍支持 EnableBinding
,则不建议在单个应用程序中混合两种样式。