【发布时间】:2020-04-27 00:58:14
【问题描述】:
我开发 google pubsub 消费者,当我使用修复值“my-alpha-pubsub-topic”时,它已完成运行
@ServiceActivator(inputChannel = "my-alpha-pubsub-topic" )
public void messageReceiver(String payload) {
LOGGER.info("Message arrived! Payload: " + payload);
}
但我在 Kubernetes 的容器上运行它,我需要通过 Environment 传递来自 env 参数的 inputChannel 值,以便 1 个容器构建支持多个环境
Alpha => inputChannel = "my-alpha-pubsub-topic"
Staging => inputChannel = "my-staging-pubsub-topic"
Production => inputChannel = "my-pubsub-topic"
购买我无法在 inputChannel 中传递参数。运行失败
@Value("${pubsub.name}")
private String pubsubName;
@ServiceActivator(inputChannel = "${pubsubName}" )
public void messageReceiver(String payload) {
LOGGER.info("Message arrived! Payload: " + payload);
}
我尝试这个并失败了
@ServiceActivator(inputChannel = "${pubsubName}" )
@ServiceActivator(inputChannel = "#{${pubsubName}}" )
@ServiceActivator(inputChannel = "${pubsub.name}" )
如何将值从属性或 env 参数传递给 inputChannel
【问题讨论】:
-
@ServiceActivator(inputChannel = "${pubsub.name}" )应该可以工作。异常说明了什么? -
@Vladucu net.trueid.platform.cmschange.MyGcpSubPlanetApplication 中方法 messageChannelAdapter 的参数 0 需要一个找不到的 'org.springframework.messaging.MessageChannel' 类型的 bean。注入点有以下注解: - @org.springframework.beans.factory.annotation.Qualifier(value="${pubsub.name}") 找到以下候选但无法注入: - 用户定义的 bean 方法'MyGcpSubPlanetApplication' 中的 'myInputChannel' - 用户定义的 bean - 用户定义的 bean
-
好的,我意识到问题出在哪里。您不能使用
@ServiceActivator(inputChannel = "${pubsub.name}" ),因为inputChannel需要接收spring bean 的限定符而不是env 变量。我想在您的代码中的某个地方,您有一个带有限定符my-alpha-pubsub-topic的频道,这就是它第一次起作用的原因。也许使用 spring 配置文件创建所有这些 bean 并具有以下内容是有意义的:@Profile("Staging") @ServiceActivator(inputChannel = "my-staging-pubsub-topic" ) public void messageReceiver。每个环境一个。 -
@Vladucu Voican 这解决了我的问题。你可以回答,我会接受你的回答
-
很高兴听到这个消息,我会在一分钟内添加它。也谢谢你。
标签: java spring spring-boot google-cloud-pubsub