1

我正在使用 spring 云流发布器将一个分区的 Rabbit MQ 队列设置为 30 个分区。消费者部署在 Cloud-foundry 中。

这需要 Cloud Foundry 中的 30 个消费者应用程序实例,我想将这些实例分布到 2 个数据中心。所以我在一个数据中心启动了 15 个实例,在第二个数据中心启动了另外 15 个实例

我预计每个实例连接到 0-29 分区(一个分区得到一个实例),但是 2 个实例(每个数据中心一个)连接到 0 到 14 个分区(0-14 连接了 2 个实例)。15 到 29 没有任何消费者。

有什么办法可以达到我的预期吗?

看起来 instance Index 在 cloud Foundry 的两个数据中心部署中自动设置为 0 到 14。有什么办法可以控制实例索引分配!?

4

1 回答 1

1

将 spring.cloud.stream.instanceIndex 设置为不同的值会有所帮助,例如第二个数据中心的 spring.cloud.stream.instanceIndex=$CF_INSTANCE_INDEX+15。我使用此处提到的 EnvironmentPostProcessor 尝试了以下解决方案并且它有效

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()); 

            }


    }   
于 2019-09-13T17:22:51.367 回答