根据环境在 Micronaut 中设置 Pub Sub 主题

Set a Pub Sub topic in Micronaut as per environment

我正在关注此 guide 以初始化 GCP Pub/Sub 发布者。

编码语法如下:

@PubSubClient
public interface PubSubService {

    @Topic("topic-a")
    void send(final A a);

    @Topic("topic-b")
    void send(final B b);

}

我想根据环境设置此主题值,因为我将为 QA/DEV(比如 topic-a-qatopic-b-qa)设置不同的主题。 我有什么办法可以通过或基于环境属性在 @Topic 注释中设置这个字符串值吗?

我没有选择在 GCP 帐户下有一个不同的项目,也创建一个不同的 class 用于 QA 覆盖这个在维护环境时不是那么优雅。

您可以在 Micronaut 的注释中使用 placeholders

@PubSubClient
public interface PubSubService {

    @Topic("${topic.a.name:topic-a}")
    void send(final A a);

    @Topic("${topic.b.name:topic-b}")
    void send(final B b);

}

表达式 ${topic.a.name:topic-a} 指示 Micronaut 在 topic.a.name 键下的配置中搜索值,如果找不到配置键,则回退到值 topic-a 。然后您可以使用例如配置不同的主题名称application-qa.yml 配置文件:

src/main/resources/application-qa.yml

topic:
  a:
    name: topic-a-qa
  b:
    name: topic-b-qa

最后,请确保当您 运行 QA 环境中的应用程序时 set a proper active environment,例如

$ java -Dmicronaut.environments=qa -jar myapp.jar