我知道我可以在Streams DSL中使用扇入和扇出符号在同一流中级联多个流修饰符,例如:
s3 > :data
ftp > :data
http > :data
:data > file
但是,假设我已经注册了stream1和stream2,并且每个都有自己的DSL,那么我如何才能级联这两者,并执行类似的操作?
例如:
time | transform | file
file | filter | http
然后我要创建类似stream3的内容:
stream1 | stream2 | s3
将同时读取time
和file
的含义,并将结果写入file
,http
和s3
。可能吗?
我假设除了写入我指定的接收器外,stream1
和stream2
也将写回到管道,因此我可以级联它们并从stream3
进行调用
编辑-我正在尝试解决的问题。
按照评论中的要求,让我详细说明我要在此处解决的问题。
我工作的组织流程复杂,有1个团队无法维护全部工作,有数据生产者团队负责从源生成数据,直到最终数据消费者之前,通常有很多团队来推断数据,转换,规范化等。
在我的情况下, stream1
将由公司中的一个团队维护,steam2
由其他团队维护,stream3
由我的平台维护。
尽管维护每个流程的团队是独立的,但从技术上讲,我仍然希望在聚合不同的流程时从内存流水线中受益。当然,我希望自己能够解决一些问题,例如-团队1发布了新版本的stream1
,将需要新版本的stream2
-对于我的用例来说还不错-我的团队可以照顾好自己
答案 0 :(得分:1)
有几种方法可以解决此问题。
选项1:将处理器+接收器的职责合并为一个“处理器”;如果完成了,您将能够将摄取(或)摄取+处理(或)摄取+处理+写入作为流传输管道的单独片段,并能够在DSL或GUI中使用它们。当然,这里组合的缺点是无法独立交互和升级业务逻辑,这在某些用例中可能不是问题。换句话说,您不一定需要将它们作为单独的微服务-如果责任很轻,那么将它们组合到一个App中就可以了。
选项2:不要使用SCDF。如前所述,构建一组类似的应用程序并将其编排为独立的应用程序。您无需处理SCDF中的源合同,处理器合同或接收合同,因此您可以灵活地以所需的任何方式插入应用程序。此处的缺点是手动编排。用于监视的数据管道可见性是另一回事。请参见示例here。如果您仍然想在SCDF中使用它,尽管它可能并不理想,但是有一种解决方法-请参见here。
选项3:您还可以使用Spring Integration构建集成流,并将其构建到SCSt App中。这样可以提供更精细的控件,但是您必须像Option-2中那样单独编排它们。这是example。
答案 1 :(得分:1)
使用路由器接收器连接流。 @sabby?
https://github.com/spring-cloud/spring-cloud-stream-modules/tree/master/router-sink