我想知道spring-xd如何处理流中的处理器。我真正想知道的是,如果处理器阻塞代码,或者它们与reactor(https://github.com/reactor/reactor/wiki/Processor)如何处理处理器有关。
如果我需要执行昂贵的阻止操作(也称为外部系统),最好的方法是什么?我喜欢使用reactor或任何其他反应框架,但是如何在XD管道架构中这样做呢?
此致
答案 0 :(得分:2)
Spring XD流中的术语 processor 具有特定含义 - 它基本上是从名为 input 的通道到名为的通道的Spring Integration消息流输出。按照惯例,这些通道是在XD流中产生和消耗有效载荷的通道。例如,如果流 mystream 被定义为someSource | someProcessor | someSink
,则处理器模块可能异步执行昂贵的操作,但流仍然必须等待处理器输出通道上的消息,所以你不会看到提高吞吐量。
但是在某些情况下,实现异步运行的接收器会有所帮助。在这种情况下,当消息到达接收器的输入通道时,流不会阻塞。异步接收器(有一个响铃的类型)可以附加到流上的点击:
mystream = someSource | ... | someSink
mytap = tap:stream:mystream > asyncSink
或命名的队列(或主题):
mystream = someSource | ... | > queue:myQueue
queue:myQueue > asyncSink
或者它可能是主要流的接收器。
要实现异步接收器,需要在接收器模块中使用轮询器和任务执行器配置Spring Integration端点,例如ServiceActivator以调用外部服务。端点轮询Pollable信道(例如,输入信道本身可能被声明为队列信道)。有关详细信息,请参阅http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html。