5

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

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

spring.cloud.stream.instanceCount=n 
spring.cloud.stream.instanceIndex=[0, ..., n-1]

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

谢谢你的帮助。

4

1 回答 1

0

我找到了如何自动动态更改instanceindex的解决方案。我在属性文件中设置 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);
    }
}

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

于 2021-05-11T08:06:43.360 回答