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

Spring Pub/Sub集成中为订阅者配置消息过滤器的实现方法

Spring Integration集成Google Pub/Sub配置原生消息过滤器方案

Google Pub/Sub的原生消息过滤器是订阅级别的服务端能力,配置完成后服务端会直接过滤不符合规则的消息,不会投递到订阅端,比客户端过滤节省带宽和算力成本。

1. 新建订阅时直接指定过滤规则

如果你使用Spring Cloud GCP Pub/Sub模块集成Spring Integration,可以通过PubSubAdmin实例在创建订阅时直接指定过滤表达式,规则可基于消息自定义属性、消息内容编写。
示例代码如下:

// 注入PubSubAdmin实例
@Autowired
private PubSubAdmin pubSubAdmin;

public void createFilteredSubscription() {
    // 过滤规则示例:仅当消息携带messageType属性且值为RESPONSE时才投递到当前订阅
    String filterExpression = "attributes.messageType = \"RESPONSE\"";
    pubSubAdmin.createSubscription(
        "async-response-sub", // 事件发送端的异步响应订阅名
        "your-business-topic", // 公用的Pub/Sub主题名
        PushConfig.getDefaultInstance(),
        600, // 消息确认超时时间,单位秒
        filterExpression,
        false // 是否开启消息排序
    );
}

2. 已有订阅更新过滤规则

如果订阅已经预先创建,你可以通过PubSubTemplate或直接调用Google Cloud Pub/Sub原生客户端更新订阅的过滤配置即可,无需重新创建订阅。

3. 适配你当前业务场景的配置建议

你当前的异步请求响应场景,可按以下规则配置实现消息隔离:

  • 事件发送端发出请求时,给消息添加自定义属性messageType: REQUEST
  • 事件消费端处理完请求返回响应时,给消息添加自定义属性messageType: RESPONSE
  • 消费端的请求订阅配置过滤规则:attributes.messageType = "REQUEST",仅会收到请求类消息,不会收到自己发送的响应消息
  • 发送端的响应订阅配置过滤规则:attributes.messageType = "RESPONSE",仅会收到对应响应消息

配置完成后即可从服务端层面过滤不需要的消息投递,无需在客户端额外处理空消息逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:04