用于数据处理管道的消息传递体系结构



我有

  • JSON数据的输入流(),
  • 修改JSON数据的Java进程(A, B, C,…),
  • JSON数据的输出流(out)。

它们可以使用JMS队列点对点连接,并按如下方式排列:

in -> A -> B -> C -> out

然而,我发现消息传递架构非常脆弱。如果我想添加、删除或重新排列组件,我必须停止管道,修改配置以根据需要重新连接它们,然后重新启动管道。当涉及到几十个过程时,这显然是非常繁琐的。

我想实现一个数据处理管道,无需停机,重新部署组件,或修改配置,允许我在运行时添加和删除组件。

in -> A -> B -> C -> out
in -> A -> C -> out             // B stopped
in -> D -> A -> C -> out        // D started behind A
in -> D -> A -> C -> B -> out   // B started after C

是否有任何框架或技术可以帮助我实现这个开箱即用?如果不是,我该如何构建解决方案?


旁注:

我一直在考虑实现一个监听注册的PipelineManager的想法。当进程启动时,以一定的优先级向PipelineManager注册。PipelineManager从数据中消费,以请求响应方式按优先级递减的顺序调度消息,然后生成数据输出。ZeroMQ将用于将组件连接在一起。我不确定如何使用ZeroMQ实现这一点,也不确定这种架构是否是追求的正确选择。

评论吗?谢谢!

不使用针对特定收件人的命令,如果您转向发布-订阅模型,您将有更多的灵活性,在该模型中,您将发布主题,其他感兴趣的服务将前往该主题获取数据。大多数JMS实现将支持它以及其他消息传递平台,如Kafka和RabbitMQ

最新更新