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

如何使用Apache Camel SMPP向多个收件人发送短信及问题排查

解决Apache Camel SMPP向多个收件人发送短信的问题

错误原因

你的代码中用recipientList.toString()给CamelSmppDestAddr设值,会生成类似[0512345678, 0512345679]的字符串,Camel SMPP组件会把这个整体当成一个收件人号码,导致号码长度超过SMPP协议限制(要求小于21位),触发PDUStringException。

解决方案

通过Camel的split处理器拆分收件人列表,为每个收件人创建独立的Exchange发送短信,这是最可靠的方式(多数SMPP网关不支持一次性提交多个收件人)。修改后的路由代码如下:

@Component
public class SMSRoute extends RouteBuilder{
    
    List<String> recipientList = Arrays.asList("0512345678","0512345679");

    @Override
    public void configure() throws Exception {
        
        from("timer://myTimer?period=1000")
            .split(constant(recipientList)) // 拆分收件人列表,每个号码生成一个Exchange
            .setHeader("CamelSmppDestAddr", simple("${body}")) // 将当前号码设为目标地址
            .setBody(simple("Hello World Camel fired at ${header.firedTime}"))
            .to("smpp://smppclient@{{host}}:{{port}}?password={{password}}&systemId={{systemId}}&"
                    + "transactionTimer=5000&systemType=70015" 
                    + "&sourceAddr=JAVA&dataCoding=8&encoding=UTF-16BE&alphabet=8");
    }
}

代码说明

  • split(constant(recipientList)):遍历收件人列表,为每个号码创建单独的消息交换(Exchange)。
  • setHeader("CamelSmppDestAddr", simple("${body}")):将拆分后的单个号码设置为短信目标地址,避免多个号码被识别为一个的问题。
  • 每个号码都会独立发送一条短信,符合SMPP协议单条短信对应单收件人的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:07:06