我正在使用spring cloud stream publisher在Cloud-foundry中部署30 partitions.Consumer来设置一个分区的Rabbit MQ队列。
这需要30个云代工的消费者应用程序实例,我想将这些实例分布到2个数据中心。因此,我在一个数据中心启动了15个实例,在第二个数据中心启动了另外15个实例
我期望每个实例连接到0-29分区(一个分区得到一个实例),但是2个实例(每个数据中心一个)连接到0到14个分区(0-14有2个实例连接)。15到29没有任何消费者。
有没有什么方法可以实现我所期望的?
看起来云代工在两个数据中心部署中都自动将实例索引设置为0到14。有没有办法可以控制实例索引分配!?
发布于 2019-09-14 01:22:51
在这里,将spring.cloud.stream.instanceIndex设置为不同的值会有所帮助,例如,第二个数据中心中的spring.cloud.stream.instanceIndex=$CF_INSTANCE_INDEX+15。我尝试了以下使用EnvironmentPostProcessor提到的here的解决方案,它起作用了
public class EnvironmentPostProcessor1 implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
String cfInstanceIndex=environment.getProperty("CF_INSTANCE_INDEX");
if(cfInstanceIndex != null ){
ExpressionParser expressionParser = new SpelExpressionParser();
Expression expression = expressionParser.parseExpression("15"+ " + " +cfInstanceIndex);
Integer result = (Integer) expression.getValue();
System.setProperty("spring.cloud.stream.bindings.input.consumer.instanceIndex",result.toString());
}
} https://stackoverflow.com/questions/57894852
复制相似问题