我的用例是对此的变体:
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图是:
处理器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?
答案 0 :(得分:1)
对于流应用,您需要设置... consumer.group属性,以便它们都在同一组中并竞争消息。
但这应该通过SCDF自动发生。