一个SCDF源,​​2个处理器,但每个项目仅处理1个

时间:2019-01-15 00:16:48

标签: rabbitmq spring-cloud-stream spring-cloud-dataflow

我的用例是对此的变体:

Create Stream with one source, two parallel processors and one sink in Spring Cloud Data Flow

在示例中,有1个源向rabbitmq发射了一个项目,两个处理器都得到了它。

我要相反。我希望源将项目发射到Rabbitmq,但每个项目只有1个处理器处理。

假装我有

1个源命名为source 2个处理器分别名为processor1和processor2

所以源发出:A,B,C到rabbitmq

RabbitMQ将发出A

首先获得A的处理器将对其进行处理-假设Processor1是幸运的处理器并处理A。

然后RabbitMQ将发出B

由于处理器1忙于A而处理器2空闲,因此处理器2处理B

RabbitMQ将发出C

处理器1以A结尾并且处于空闲状态,因此处理器1处理C

我想到的Spring Cloud Data Flow图是:

enter image description here

处理器A是最上方的处理器,处理器B是最下方的处理器

当我部署并运行它时,源发出A,B和C,然后 处理器1和Processor2都收到A,B然后是C

我很困惑,如果我想要的行为是我可以在Spring Cloud Data Flow中实现的,或者是否存在RabbitMQ设置(如消息删除的答案所暗示)

”是设置自动确认标志时发生的事情。通过这种方式,消息一经使用就被确认-从队列中消失。”

如果是这种情况,我可以在Spring Cloud Data Flow源中进行设置吗?还是RabbitMQ设置?或者完全是其他设置

更新:

我添加了

spring.cloud.stream.bindings.input.group=consumerGroup

到我处理器的application.properties文件。

不幸的是,两个处理器都接收到完全相同的数据。

我需要在源的application.properties中添加类似的条目吗?

我需要更改处理器上的注释吗?当前是:

@Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)

我是否需要以任何方式修改源上的注释?当前是:

@Bean
@InboundChannelAdapter(value = Source.OUTPUT, poller = 
     @Poller(fixedDelay = "1000", maxMessagesPerPoll = "1"))

包含@Poller会以任何方式改变这一点吗?

更新:

该属性是否名为spring.cloud.stream.instanceCount?

1 个答案:

答案 0 :(得分:1)

对于流应用,您需要设置... consumer.group属性,以便它们都在同一组中并竞争消息。

但这应该通过SCDF自动发生。