我找到了如何自动动态更改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