gpt4 book ai didi

java - Camel Java DSL - header 中的 ENUM 路由 - 基于内容的路由器或动态路由器

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:56 26 4
gpt4 key购买 nike

我有一个生成对象并使用 Camel 中的 ProducerTemplate 将它们发送到 SEDA 队列的 bean。

我发送一个正文和一个标题:

producerTemp.sendBodyAndHeader(document, "sourceSystem", sourceSys);

此处 header 名称是 sourceSystem, header 对象值是一个 ENUM (sourceSys),其中包含 document 对象的来源许多不同的属性。

我想以并发方式从 SEDA 队列中提取消息,并根据 sourceSys 枚举的值将它们发送到不同的端点。

camel 中使用它最有效的 EIP 是什么?有人有使用 Java DSL 的示例吗?我不确定如何测试枚举的值?

我想我会做这样的事情:

from("seda:a")
.choice()
.when(header("foo").isEqualTo(SourceSysEnum.SYSTEM1))
.to("seda:b")
.when(header("foo").isEqualTo(SourceSysEnum.SYSTEM2))
.to("seda:c")
.otherwise()
.to("seda:d");

..?

最佳答案

可以使用收件人列表EIP http://camel.apache.org/recipient-list.html

然后例如使用 java bean 来计算消息应该去往的 uri。

from("seda:a")
.recpientList().method(MyBean.class, "whereToGo");

并且在 bean 中你可以使用 bean 参数绑定(bind)。

因此您可以按如下方式绑定(bind) header :

public class MyBean {

public String whereToGo(String body, @Header("foo") SourceSysEnum sys) {
...
}
}

如果不需要消息正文,则可以省略该参数。

关于java - Camel Java DSL - header 中的 ENUM 路由 - 基于内容的路由器或动态路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832375/

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