Spring 集成服务激活器根据输入使用 bean 名称
Spring integration service activator use bean name based on input
我正在使用 spring 集成 dsl 创建一个管道来丰富和持久化从 kafka 到数据库的事件。可以有多种事件类型,我们已经创建了一个事件接口和相应的实现classes.
事件接口有方法定义-parse()、process()、persist() 和实现class有实现
@Bean
public IntegrationFlow baseEventFlow() {
return IntegrationFlows.from(Kafka.messageDrivenChannelAdapter(kafkaListenerContainer))
.wireTap(WIRE_TAP_CHNL) // Log the raw messaged
.handle(eventDispatch, "preProcess")
.handle(eventDispatch, "dispatch") //identify the implementation class from the event name
.handle(???,"parse") //get the classname from the above handler and then invoke methods
.handle(???,"validate")
.get();
.handle(eventDispatch, "dispatch") -> 在运行时给出实现 class 名称
我如何在这个 class 名称上调用方法,因为我在运行时根据一些输入事件得到 class
您可以将 dispatch
中的 object 存储到 header 中。下一个 handle()
可以获取 header,转换为通用接口并针对 payload
调用适当的方法。这确实是一种策略模式。你真的不能用静态处理程序 object 定义来做到这一点。
更新
can you please provide an example to refer
没有这样的例子,因为 use-case 超出了标准组件的行为。您的任务是该领域中数百万(或更多?)可能的业务需求之一。我们绝对不能在样本中涵盖所有这些。
反正我是这么想的:
.enrichHeaders(h -> h.headerFunction("handler", eventDispatch::dispatch))
.handle((p, h) -> ((EventProcessor) h.get("handler")).parse(p))
.handle((p, h) -> ((EventProcessor) h.get("handler")).validate(p))
我正在使用 spring 集成 dsl 创建一个管道来丰富和持久化从 kafka 到数据库的事件。可以有多种事件类型,我们已经创建了一个事件接口和相应的实现classes.
事件接口有方法定义-parse()、process()、persist() 和实现class有实现
@Bean
public IntegrationFlow baseEventFlow() {
return IntegrationFlows.from(Kafka.messageDrivenChannelAdapter(kafkaListenerContainer))
.wireTap(WIRE_TAP_CHNL) // Log the raw messaged
.handle(eventDispatch, "preProcess")
.handle(eventDispatch, "dispatch") //identify the implementation class from the event name
.handle(???,"parse") //get the classname from the above handler and then invoke methods
.handle(???,"validate")
.get();
.handle(eventDispatch, "dispatch") -> 在运行时给出实现 class 名称
我如何在这个 class 名称上调用方法,因为我在运行时根据一些输入事件得到 class
您可以将 dispatch
中的 object 存储到 header 中。下一个 handle()
可以获取 header,转换为通用接口并针对 payload
调用适当的方法。这确实是一种策略模式。你真的不能用静态处理程序 object 定义来做到这一点。
更新
can you please provide an example to refer
没有这样的例子,因为 use-case 超出了标准组件的行为。您的任务是该领域中数百万(或更多?)可能的业务需求之一。我们绝对不能在样本中涵盖所有这些。
反正我是这么想的:
.enrichHeaders(h -> h.headerFunction("handler", eventDispatch::dispatch))
.handle((p, h) -> ((EventProcessor) h.get("handler")).parse(p))
.handle((p, h) -> ((EventProcessor) h.get("handler")).validate(p))