0

我正在使用 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中,如何做到这一点。

4

2 回答 2

1

要覆盖默认主题,您可以使用 GcpPubSubHeaders.TOPIC 标头。

final Message<?> message = MessageBuilder
        .withPayload(msg.getPayload())
        .setHeader(GcpPubSubHeaders.TOPIC, "newTopic").build();

并修改您sendToPubsub(Message<byte[]> message)以使用消息作为输入。

参考更多信息

于 2022-02-07T11:23:41.193 回答
1

考虑创建一个BeanFactory来生成一个给定主题名称的 PubSubMessageHandler Bean。PubSubMessageHandler还有一个 setTopic() 方法,可能有用。

于 2019-12-12T16:30:58.317 回答