如何使用RMQ和Spring云流创建基于分区的生产者?

时间:2017-04-25 15:06:55

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

我正在尝试找到Spring云流的示例,它为RMQ创建基于parition的制作人。我想看看它将如何为这些队列创建绑定,因为RMQ本身不支持主题的分区,但它会创建相当于分区数的队列数(我读过这个,我可能是错的)。首先,我想了解如何使用RMQ上的Spring云流为基于分区的生产者创建生产者。

1 个答案:

答案 0 :(得分:2)

@SpringBootApplication
@EnableBinding(Source.class)
public class So43614477Application implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(So43614477Application.class, args);
    }

    @Autowired
    private MessageChannel output;

    @Override
    public void run(String... args) throws Exception {
        output.send(MessageBuilder.withPayload("fiz").setHeader("whichPart", 0).build());
        output.send(MessageBuilder.withPayload("buz").setHeader("whichPart", 1).build());
    }

}

有属性......

spring.cloud.stream.bindings.output.destination=foo
spring.cloud.stream.bindings.output.producer.partition-key-expression=headers['whichPart']
spring.cloud.stream.bindings.output.producer.partition-count=2

spring.cloud.stream.bindings.output.producer.required-groups=bar

我添加了required-groups,以便您可以看到消费者队列是如何绑定的。

enter image description here

foo配置绑定:

enter image description here

表达式可以是针对消息评估的任何有效表达式(例如payload.hashCode());然后根据分区计数修改%以确定最终分区。