Camel DSL适用于消息处理模式?

时间:2014-08-23 09:38:34

标签: java apache-camel gson messaging enterprise-integration

我遇到需要应用程序向消息代理发送消息的情况。然后,另一个侦听代理的客户端必须使用队列中的消息,确定它们是什么类型的消息,并将消息传递给适当的处理程序。

例如,如果将Fizz POJO序列化为JSON然后发送给代理,则另一个进程必须使用它,将其从JSON反序列化为Fizz实例,然后知道通过Fizz关闭到FizzHandler处理器。对于Buzz消息也是如此:它应该反序列化为Buzz并发送给BuzzHandler等。

我相信路线的伪代码应该是这样的:

from(broker)
    .unmarshal().json(JsonLibrary.Gson)
    .dynamicRouter(someMechanismForDeterminingHandler)

相信动态路由器是解决此问题的合适处理器,但不是EIP专家,我可能不在我的元素中。

这里有两大问题:

  • Camel-GSON怎么知道一种JSON代表Fizz对象,而另一种JSON代表Buzz对象?
  • 应该使用什么EIP / Camel DSL /处理器将反序列化的消息路由到正确的处理程序?

1 个答案:

答案 0 :(得分:2)

您需要知道要提前解组某个字符串的类。     设置数据格式并在任何您想要解组到Fizz的地方引用它。 Pojo - > JSON更容易,因为gson可以通过查看手中的对象来计算您的格式。

GsonDataFormat json2Fizz = new GsonDataFormat(Fizz.class);
GsonDataFormat json2Buzz = new GsonDataFormat(Buzz.class);

可能最好的方法是在解组之前进行路由。使用Content based router,可以轻松跟踪路由。

如果你在json中有一些能够识别Fizz或Buzz的东西,你可以使用表达式语言JsonPath,它允许你直接在json字符串上路由/过滤等。如果没有,您可能希望传递一个标题,以某种方式说明您可以路由的消息类型。