跳到主要内容
版本:5.0.1

RabbitMQ Stream 插件的初始消费者支持

DeepSeek V3 中英对照 Initial Consumer Support for the RabbitMQ Stream Plugin

现已提供对 RabbitMQ Stream Plugin 的基础支持。要启用此功能,您必须将 spring-rabbit-stream jar 添加到类路径中——其版本必须与 spring-amqp 和 spring-rabbit 保持一致。

important

当您将 containerType 属性设置为 stream 时,不支持上述消费者属性;concurrency 仅支持超级流。每个绑定只能消费单个流队列。

要将 binder 配置为使用 containerType=stream,Spring Boot 将根据应用程序属性自动配置一个 Environment @Bean。您也可以选择性地添加一个自定义器来定制监听器容器。

@Bean
ListenerContainerCustomizer<MessageListenerContainer> customizer() {
return (cont, dest, group) -> {
StreamListenerContainer container = (StreamListenerContainer) cont;
container.setConsumerCustomizer((name, builder) -> {
builder.offset(OffsetSpecification.first());
});
// ...
};
}

传递给自定义函数的 name 参数是 destination + '.' + group + '.container'。

流 name()(用于偏移量跟踪)被设置为绑定 destination + '.' + group。可以使用上面展示的 ConsumerCustomizer 来更改它。如果你决定使用手动偏移量跟踪,Context 可以作为消息头使用:

int count;

@Bean
public Consumer<Message<?>> input() {
return msg -> {
System.out.println(msg);
if (++count % 1000 == 0) {
Context context = msg.getHeaders().get("rabbitmq_streamContext", Context.class);
context.consumer().store(context.offset());
}
};
}

有关配置环境和消费者构建器的信息,请参阅 RabbitMQ Stream Java Client 文档。

RabbitMQ Super Streams 的消费者支持​

有关超级流(Super Streams)的信息,请参阅超级流。

使用超级流(super streams)可以在每个超级流分区上仅有一个活跃消费者的情况下,实现自动的横向扩展与收缩。

配置示例:

@Bean
public Consumer<Thing> input() {
...
}
spring.cloud.stream.bindings.input-in-0.destination=super
spring.cloud.stream.bindings.input-in-0.group=test
spring.cloud.stream.bindings.input-in-0.consumer.instance-count=3
spring.cloud.stream.bindings.input-in-0.consumer.concurrency=3
spring.cloud.stream.rabbit.bindings.input-in-0.consumer.container-type=STREAM
spring.cloud.stream.rabbit.bindings.input-in-0.consumer.super-stream=true

框架将创建一个名为 super 的超级流,包含 9 个分区。此应用最多可部署 3 个实例。