WePush 5.0.9:批量推送工具开始减少 SDK 依赖,转向直连调用

2026-08-19 54 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

WePush 5.0.9 已发布。这个版本没有堆叠大量新功能,而是把重点放在消息通道的调用方式上:多家短信服务从依赖第三方 Maven SDK,调整为直接调用服务商接口;钉钉相关调用也同步减少第三方 SDK 依赖。

对于一个专注批量推送的小工具来说,这类改动很实际。依赖更少,通常意味着更轻的构建结果、更少的版本冲突,以及更容易排查的网络请求链路。

这次更新改了什么

短信通道改为直连调用

5.0.9 优化了多家短信通道的依赖方式,涉及阿里云、百度云、腾讯云、七牛云、云片等短信服务。根据更新说明,相关调用改为直接访问服务商接口,并移除了对应的 Maven 依赖。

这里的“直连调用”可以理解为:应用不再主要通过服务商提供的 Java SDK 完成请求,而是自行组装 HTTP 请求、签名参数和请求体,再调用服务商的开放 API。

这种方式的价值主要体现在几个方面:

  • 减少项目依赖数量,降低传递依赖冲突的概率。
  • 避免 SDK 升级节奏与应用自身节奏不一致。
  • 请求、响应和异常处理更容易统一封装。
  • 在批量推送场景下,更方便增加重试、限流和日志记录。

但代价也很明确:签名算法、时间戳、编码方式、错误码和接口版本需要由项目自己维护。直连并不等于更简单,而是把原本由 SDK 隐藏的工作显式放回了应用层。

钉钉调用减少第三方 SDK

钉钉相关调用也进行了优化,目标同样是减少第三方 SDK 依赖。对于消息推送工具,这种调整有助于把不同渠道的调用统一到更清晰的 HTTP 适配层中。

一个较稳妥的设计是为每个通道保留独立适配器,例如:

MessageChannel
├── SmsAliyunChannel
├── SmsTencentChannel
├── SmsYunpianChannel
└── DingTalkChannel

每个适配器只负责三件事:准备认证信息、发送 HTTP 请求、把服务商响应转换成统一结果。上层的批量任务则只关心“发送成功、失败、是否可重试”等业务状态。

直连 HTTP 调用可以怎样落地

下面是一个可改造的 curl 示例,用于说明短信服务直连调用的基本形态。不同服务商的 URL、签名字段、请求头和参数名称并不相同,因此这不是某一家服务商的官方命令,运行前需要替换为对应平台的接口定义。

#!/usr/bin/env bash
set -euo pipefail

SMS_ENDPOINT="https://sms-provider.example.com/v1/messages"
API_KEY="replace-with-api-key"
SIGNATURE="replace-with-generated-signature"

curl --fail-with-body --silent --show-error \
  --request POST "$SMS_ENDPOINT" \
  --header "Authorization: Bearer ${API_KEY}" \
  --header "X-Signature: ${SIGNATURE}" \
  --header "Content-Type: application/json" \
  --data '{
    "mobile": "13800000000",
    "template_id": "login_code",
    "template_params": {
      "code": "123456"
    }
  }'

接入真实通道时,建议把这段流程拆成可测试的步骤:

  1. 根据服务商文档生成时间戳、随机数和签名。
  2. 使用明确的字符集序列化请求参数,避免签名和发送内容不一致。
  3. 设置连接超时与读取超时,不能让单个通道阻塞整个批量任务。
  4. 区分网络错误、认证错误、参数错误和业务拒绝。
  5. 对明确可重试的错误使用退避策略,避免重复发送短信。

例如,批量推送服务不应把所有异常都简单转换为“发送失败”然后立即重试。认证失败通常需要告警,参数错误需要修复模板或手机号,而临时网络错误才适合有限次数重试。

依赖减少之后,工程上要补什么

移除 SDK 后,项目需要补回一些原本由 SDK 提供的能力。可以在通道公共层统一配置以下内容:

push:
  http:
    connect-timeout-ms: 3000
    read-timeout-ms: 5000
    max-retries: 2
    retry-backoff-ms: 500
  logging:
    request-id: true
    mask-mobile: true
    record-provider-response: false

这份配置只是一个实践示例,具体配置项需要根据 WePush 的部署方式和现有配置结构调整。尤其要注意日志脱敏:手机号、Access Key、签名和短信内容都不应直接写入普通业务日志。

还可以为每个通道设计统一的返回对象,例如:

public record PushResult(
        boolean success,
        boolean retryable,
        String providerCode,
        String message,
        String requestId) {
}

这样,上层批量任务无需理解阿里云、腾讯云或云片的具体错误码,只需要根据 successretryable 决定是否记录、重试或告警。真正的服务商错误码仍应保留在 providerCode 中,方便排查问题。

升级到 5.0.9 时的检查清单

如果正在使用旧版本,升级后可以重点检查下面几项:

  • 构建文件中是否仍然残留不再需要的短信或钉钉 SDK 依赖。
  • 各通道的 Access Key、Secret、签名和模板配置是否能正常读取。
  • 测试环境能否完成一条真实但低风险的短信发送。
  • 网络超时、服务商限流和无效参数是否有清晰日志。
  • 批量发送失败后,重试任务是否可能造成重复消息。
  • 生产环境是否设置了请求超时、并发上限和敏感信息脱敏。

小结

WePush 5.0.9 的核心变化是一次依赖治理和调用链路优化:短信通道改为直连调用,钉钉调用减少第三方 SDK。对于批量推送工具,这种调整有助于保持项目轻量,也让各通道的 HTTP 行为更透明。

采用这类版本时,不能只关注 Maven 依赖数量是否下降,还要同步检查签名、超时、重试、错误码映射和日志安全。把服务商差异封装在独立适配器中,才能在减少 SDK 的同时,避免把复杂度扩散到整个推送系统。


相关推荐