1

我目前正在设计一个轻量级的消息传递系统。对于这个消息传递系统(一个轻型集线器),我需要一个基于小路由的工作流。首先,我不想使用工作流引擎或 bpm 引擎,因为这对于这种轻量级消息传递解决方案来说太过分了。

我的要求很简单——我更喜欢有一个决策模块/组件,它基本上决定下一步/端点/组件。决策者考虑消息的当前状态、一些预定义的功能规则(可能在数据库中)和一些技术规则(如果需要)。我正在考虑不同端点/组件之间基于 jms 的通信(这些端点将是作为应用程序的一部分的内部端点) - 这将允许松散耦合并且更具可扩展性。

我正在研究骆驼以及它如何以及是否可以提供帮助,但我无法弄清楚路线中的下一步将由中央决策器模块/组件定义的方式。

我还在研究拥有多个决策器模块并在需要时将它们链接起来的可能性(如果骆驼在那里会有所帮助)。知道如何使用骆驼或任何其他框架或仅使用 java 和 spring 来实现这一点吗?

4

1 回答 1

0

您可以使用决策者设置的消息头和基于内容的路由来控制消息流。例如:

在您接收消息的路线中

...
.from(endpointreceivingmessage)
.process(decider)
.recipientList(simple("direct:${header.destinationRoute"));

在您的决策者处理器中

...
doProcess(Exchange exchange) throws Exception{
Message message = exchange.getIn(); 

//logic to determine next step
message.setHeader("destinationRoute", "DestinationRoute1"); 

exchange.setIn(message); 
}

然后你可以为下一步有不同的路线,也可以是处理器到链决策者的路线。

使用接收者列表的替代方法是使用选择:

.choice
 .when(simple("{header.destinationRoute} is 'DestinationRoute1'"))
  .to("direct:DestinationRoute1")
 .when(simple("{header.destinationRoute} is 'DestinationRoute2'"))
  .to("direct:DestinationRoute2")
  ...
于 2018-06-13T14:31:42.670 回答