You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Pub/Sub多订阅配置问题:String消息反序列化失败

GCP Pub/Sub 多格式消息订阅配置解决方案

问题根源:AuditSubscriberConfig 沿用了 JacksonPubSubMessageConverter,该转换器会默认将消息 payload 当作 JSON 解析,但审计消息是纯字符串格式,因此触发反序列化错误。

解决方案:为不同格式的订阅配置专属 MessageConverter

三个订阅保持手动ACK模式不变,只需为每个 PubSubInboundChannelAdapter 绑定对应格式的转换器:

1. JSON 格式订阅(User/Product)配置保持原样

UserSubscriberConfig 和 ProductSubscriberConfig 继续使用 JacksonPubSubMessageConverter,确保 JSON 消息能正确反序列化为对应实体类:

@Configuration
public class UserSubscriberConfig {

    @Bean
    public PubSubInboundChannelAdapter userInboundChannelAdapter(
            @Qualifier("userInputChannel") MessageChannel inputChannel,
            PubSubTemplate pubSubTemplate) {
        PubSubInboundChannelAdapter adapter = new PubSubInboundChannelAdapter(pubSubTemplate, "user-subscription-name");
        adapter.setOutputChannel(inputChannel);
        adapter.setMessageConverter(new JacksonPubSubMessageConverter());
        adapter.setAckMode(AckMode.MANUAL);
        return adapter;
    }

    @Bean
    public MessageChannel userInputChannel() {
        return new DirectChannel();
    }
}

2. String 格式订阅(Audit)配置修改

将 AuditSubscriberConfig 的转换器替换为 SimplePubSubMessageConverter,该转换器会直接将消息 payload 转为字符串,不进行 JSON 解析:

@Configuration
public class AuditSubscriberConfig {

    @Bean
    public PubSubInboundChannelAdapter auditInboundChannelAdapter(
            @Qualifier("auditInputChannel") MessageChannel inputChannel,
            PubSubTemplate pubSubTemplate) {
        PubSubInboundChannelAdapter adapter = new PubSubInboundChannelAdapter(pubSubTemplate, "audit-subscription-name");
        adapter.setOutputChannel(inputChannel);
        // 使用SimplePubSubMessageConverter处理纯字符串消息
        adapter.setMessageConverter(new SimplePubSubMessageConverter());
        adapter.setAckMode(AckMode.MANUAL);
        return adapter;
    }

    @Bean
    public MessageChannel auditInputChannel() {
        return new DirectChannel();
    }
}

关键注意事项

  • 每个订阅的 PubSubInboundChannelAdapter 必须绑定独立的转换器,避免共用转换器导致格式解析冲突
  • 消费者类只需对应各自的 inputChannel 即可,无需额外修改,转换器会自动完成格式适配

内容的提问来源于stack exchange,提问作者Tech_sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:55:23