我正在使用 pub sub 与 spring boot 集成,我的配置类如下所示:
@Configuration
public class PubSubConfiguration {
@Value("${spring.pubsub.topic.name}")
private String topicName;
@Bean
@ServiceActivator(inputChannel = "MyOutputChannel")
public PubSubMessageHandler messageSender(PubSubTemplate pubsubTemplate) {
return new PubSubMessageHandler(pubsubTemplate, topicName);
}
@MessagingGateway(defaultRequestChannel = "MyOutputChannel")
public interface PubsubOutboundGateway {
void sendToPubsub(String attribute);
}
}
所以现在,我只调用 sendToPubSub 方法,该方法将有效负载从我的应用程序添加到主题中,如下所示:
@Autowired
private PubSubConfiguration.PubsubOutboundGateway outboundGateway;
// used line in my code wherever is needed.
outboundGateway.sendToPubsub(jsonInString);
上面的代码仅用于我从应用程序属性文件加载的一个主题。
但是现在我想让我的主题名称动态添加到messageSender中,如何做到这一点。
要覆盖默认主题,您可以使用 GcpPubSubHeaders.TOPIC 标头。
final Message<?> message = MessageBuilder
.withPayload(msg.getPayload())
.setHeader(GcpPubSubHeaders.TOPIC, "newTopic").build();
并修改sendToPubsub(Message<byte[]> message)
以使用消息作为输入。
参考以获取更多信息
考虑创建一个 BeanFactory 来生成一个给定主题名称的 PubSubMessageHandler Bean。PubSubMessageHandler 还有一个 setTopic(( 方法,可能会有用。