【问题标题】:I want to know how to simplify multiple binding with Spring Cloud Stream我想知道如何使用 Spring Cloud Stream 简化多重绑定
【发布时间】:2018-12-14 01:17:09
【问题描述】:

我正在尝试使用 Spring Cloud Stream 连接到多个 Kafka 代理。
在运行时,当我有特定的配置文件或条件时,我想避免绑定到特定的代理。

下面的代码是我开发的一个示例。

@Profile({"b","c"})
@EnableBinding(AConsumer.AChanel.class)
public class AConsumer {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @StreamListener(AConsumer.AChanel.INPUT)
    public void subscribe(String message, @Headers Map<String, Object> headers) {
        logger.info("i receive message(A) --> message : {}", message);
    }

    public interface AChanel {
        public static final String INPUT = "a_input";
        @Input(INPUT) SubscribableChannel aInput();
    }

}


@Profile({"a","c"})
@EnableBinding(BConsumer.BChanel.class)
public class BConsumer {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @StreamListener(BConsumer.BChanel.INPUT)
    public void subscribe(String message, @Headers Map<String, Object> headers) {
        logger.info("i receive message(B) --> message : {}", message);
    }

    public interface BChanel {
        public static final String INPUT = "b_input";
        @Input(INPUT) SubscribableChannel bInput();
    }
}


@Profile({"a","b"})
@EnableBinding(CConsumer.CChanel.class)
public class CConsumer {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @StreamListener(CConsumer.CChanel.INPUT)
    public void subscribe(String message, @Headers Map<String, Object> headers) {
        logger.info("i receive message(C) --> message : {}", message);
    }

    public interface CChanel {
        public static final String INPUT = "c_input";
        @Input(INPUT) SubscribableChannel cInput();
    }

}

没有比这更好的方法吗?
我认为还有另一种方法可以使用注释(如条件或其他)或自定义弹簧云流 图书馆。

谁知道,请帮帮我。

【问题讨论】:

    标签: spring spring-boot apache-kafka spring-cloud-stream


    【解决方案1】:

    我不认为个人资料是处理这个问题的最佳方式。

    根据我对您的要求的理解,可以使用不同的属性值甚至更进一步,使用属性解析器轻松处理上述问题

    1. 您可以在启动时通过命令行、配置服务器和许多其他方式简单地定义您的属性

    2. 您可以在 yaml 或属性文件中静态定义您的属性,然后使用标准属性解析表示法来提供实际值

      spring.cloud.stream.someproperty=${someproperty.value}

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2020-04-08
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2018-01-24
      • 2017-05-31
      • 2020-03-23
      • 1970-01-01
      相关资源
      最近更新 更多