java 列表伸缩,java – Camel – 设计可伸缩的动态数据流

使用案例:我从源端点收到消息.根据消息的类型,它由完全不同的业务逻辑(例如,http请求,tcp消息,db调用)处理.然后,结果并传递到下游(假设输出消息的统一标准)

路线看起来像这样:

from(_source_)

...

// handle data (this is dynamic)

...

process(_logger_)

to(_receiver_)

一个直接的解决方案是使用choice():

... // Upstream

.choice()

.when(someCondition).process(sendHTTP)

.when(anotherCondition).process(getToken).process(sendTCP)

.otherwise().process(sendToDB)

... // Downstream

但那不是很容易扩展.

另一个解决方案是将所有内容放在一个处理器中,然后调用具有多态行为的客户端:

... // Upstream

.process(messageSwitch)

... // Downstream

public class MessageSwitch implements Processor {

public void process(Exchange ex) {

RequestClient client = this.resolveClient(ex);

client.sendRequest(ex.getIn());

}

}

然而,这也使我们忽略了这条路线.在这种情况下,我的问题是执行在处理器内部发生的新路由是否是常见做法.例如,我可能想通过http4库(http://camel.apache.org/http4.html)执行http调用.

或者我可能不正确地接近这个问题.

最佳答案 解决此问题的一种方法是让处理器在接收到的消息上设置标头,并为每种类型设置目标路由,然后使用驼峰接收者列表将消息发送到这些目标路由.

from(_source_)

.process(_processorcodebelow_)

.recipientList(simple("direct:${header.MessageRouterByType}"));

处理器看起来像:

public void doProcees(Message message){

Message message = exchange.getIn();

... //logic to check type

message.setHeader("MessageRouterByType", "messagetype1");

...//etc for different types

然后,您可以使用不同的路由为每种不同的消息类型执行业务逻辑.

from("direct:messagetype1").routeId("messagetype1")

.process(_messagetype1processor_)

.to(_receiver_)

您可以使用路由ID或日志记录来跟踪消息所采用的路由.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值