首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring cloud Stream Rabbit Binder,跨数据中心分布云代工实例的单一消息源

Spring cloud Stream Rabbit Binder,跨数据中心分布云代工实例的单一消息源
EN

Stack Overflow用户
提问于 2019-09-12 02:25:24
回答 1查看 77关注 0票数 1

我正在使用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。有没有办法可以控制实例索引分配!?

EN

回答 1

Stack Overflow用户

发布于 2019-09-14 01:22:51

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

代码语言:javascript
复制
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()); 

            }


    }   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57894852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档