使用 Spring Cloud Stream kafka 动态更改实例索引

kat*_*aty 5 apache-kafka spring-boot apache-kafka-streams spring-kafka spring-batch-stream

类似于:在运行时更改 spring-cloud-stream 实例索引/计数

我在微服务器架构中启动批处理时做了一个 poc,我正在使用 Spring Batch 和 Spring Cloud Stream Kafka。我正在寻找一种方法来动态创建消费者(处理器)应用程序的多个实例。我看到可以定义多个实例

spring.cloud.stream.instanceCount=n 
spring.cloud.stream.instanceIndex=[0, ..., n-1]
Run Code Online (Sandbox Code Playgroud)

但是我还没有找到动态改变 instanceIndex 值的方法。是否可以使用 Spring Cloud Stream kafka 动态修改此值。

谢谢你的帮助。

kat*_*aty 0

我找到了如何自动动态更改实例索引的解决方案。我在属性文件中设置了 minPortNum 和 maxPortNum 以及 instanceCount 的值,并根据port-minPortNum的值改变 instanceIndex ,然后运行我想要的尽可能多的消费者。


@component
class ServerPortCustomize implements WebServerFactoryCustomizer {
    @value("${port.number.min}")
    private Integer minPortNum;
    @value("${port.number.max}")
    private Integer maxPortNum;
    @value("${spring.cloud.stream.instanceCount}")
    private Integer instanceCount;
    
    @Override
    public void customize(final ConfigurableWebServerFactory factory) {
        final int port = SocketUtils.findAvailableTcpPort(minPortNum, maxPortNum);
        factory.setPort(port);
        System.getProperties().put("server.port", port);
        System.getProperties().put("spring.cloud.stream.instanceIndex", port-minPortNum);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个例子,我设置了 spring.cloud.stream.instanceCount=3,所以我运行三个消费者,实例索引值为 0、1 和 2