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

Posted

技术标签:

【中文标题】根据环境在 Micronaut 中设置 Pub Sub 主题【英文标题】:Set a Pub Sub topic in Micronaut as per environment 【发布时间】:2021-12-13 03:56:09 【问题描述】:

我正在关注此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 帐户下创建一个不同的项目,同时为 QA 创建一个不同的类来覆盖这个在维护环境时并不那么优雅。

【问题讨论】:

【参考方案1】:

您可以在 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

【讨论】:

感谢完美答案!!!我不确定我们如何或是否可以在注释值中使用应用程序属性。

以上是关于根据环境在 Micronaut 中设置 Pub Sub 主题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 测试中设置环境变量或系统属性?

如何在 NestJS 中设置类似 Angular 的配置环境文件?

如何在postman collection runner中设置环境变量?

即使在 webpack.DefinePlugin 中设置了环境变量,也没有在电子中定义

在serverless.yml中设置外部文件的环境变量

如何在 Flutter Web 项目中设置 Firebase 功能