Java SMPP库比较

20
我们即将开始一个项目,需要使用SMPP作为主要的集成交换渠道。由于短信不一定是我们业务的核心,我想使用一个为Java编写的SMPP库,让它尽可能地少麻烦。除了基本的协议外,我们很可能不需要更高级的功能或进行任何底层微调。
为此,我已经列出了一些可能的选项:
Logica的Open SMPP、Apache的Camel、JSMPP和Twitter的Cloudhopper。
有更多经验的人可以分享一些他们的使用经验吗?
编辑:为了给使用案例范围,我们将发送和接收短信,因此该库应该希望能够方便地处理客户端操作和服务器监听器实现。
8个回答

14

我曾经在不同的项目中使用了jSMPPcloudhopper-smpp这两个库,用于通过smpp发送和接收短信,情况包括:

  • 接收中高数量的MO。
  • 发送高数量的MT(高达每秒70条)。

这两个库都表现良好,个人认为 jSMPP 更加用户友好,可以立即开始编码。但是,在使用 GitHub 上的最新版本时,我遇到了一些bug,这些bug仍没有得到修复。

在使用cloudhopper之后,我认为这值得学习曲线,相对于jSMPP来说陡峭一些(个人看法)。


2
嗨,Farhan,你是从哪里开始学习Cloudhooper的?只是通过源代码吗?还是除了源代码之外,你还找到了其他文档?谢谢。 - David Hofmann
2
嗨,大卫,我能找到的最好的资源是库中包含的示例(https://github.com/twitter/cloudhopper-smpp/tree/master/src/test/java/com/cloudhopper/smpp/demo)。如果您已经知道SMPP的工作原理,花点时间玩弄源代码就足以掌握控制流程。对于与SMPP相关的疑问,您可以参考SMPP规范(http://www.turkcell.com.tr/downloads/hakkimizda/pdf/SMPP_v3_4_Issue1_2.pdf)。 - Farhan
1
截至2020年中期,jsmpp由https://jsmpp.org/社区维护,在此处https://github.com/opentelecoms-org/jsmpp。 - Roman-Stop RU aggression in UA

7

以下是我最终决定的更新内容(以及图书馆的审核):

  1. Logica:看起来很有前途,但我担心社区的缺乏更新/活跃性。最后一个有意义的构建版本已经过去了很长时间,所以我不想进行投资。

  2. Apache Camel:我们开始使用它,但他们的库存在一些限制(我们需要向SMPP数据包中插入自定义头)。公平地说,他们在论坛上对问题的回应相当迅速,但他们的构建周期对我的开发周期来说有点太长了,所以我们放弃了这个库。

  3. JSMPP:这是我们最终使用的库。总体上相当简单,但它似乎预期你已经对SMPP有了相当好的了解。目前处于暂存状态,因此我无法告诉您它在生产负载下的表现如何。等到上线后我会进行更新。

  4. Cloudhopper:老实说,这是我想使用的库,但更多的是因为像任何极客一样,我想尝试最新、最闪亮的玩具。但我没有得到任何满意的答复,所以我对加入这个库感到犹豫。没有理由采用一个需要我深入阅读其代码的库,而其他更有文档记录的选项是可用的。


1
根据这个问题的答案,我开始用Cloudhopper和jSMPP做了一个简短的列表。为了让jSMPP与Nexmo配合工作,我不得不调整示例参数并修复一个错误 - 而且我仍然会收到一个非致命(?)的IOException - 而Cloudhopper与Nexmo一起开箱即用;它还有一个服务器,这对测试来说是一个很大的优势。 - Richard Barnett

5
我目前正在使用Logica的库在Java上实现SMPP解决方案。这个库非常易于使用。以下信息说明了测试的结果:
应用程序: 部署在Glassfish 3.1.2.2中的企业级Java Beans应用程序 语言: Java (使用JMS) 库: Logica SMPP (版本1.3) 源(ESME): localhost 目标(SMSC): 托管在Amazon Web Services的开发服务器上的Logica SMSC模拟器 类型: Transciever异步 平均发送速率(80%): 246条/秒 低发送速率(15%): 50条/秒 高发送速率(5%): 255条/秒
只要您坚持使用异步模式,它就非常高效。如果您需要保持消息和其响应之间的关联,请使用消息和响应中都有的“序列号”。

请问您能告诉我如何在GlassFish中运行SMPP客户端吗?是否可以将GlassFish用于非Web应用程序? - Mohammad Banisaeid
你可以使用Glassfish来进行非Web应用程序的开发。这取决于你所寻找的功能。例如,你可以创建一个Bean容器(Java Bean项目),并创建一个带有SMPP客户端逻辑的EJB。我们是如何做到的呢?我们创建了一个MDB(消息驱动Bean)。MDB可用作异步队列系统。在这里,我们拥有一个活动的SMPP会话,负责构建SMPP消息(从MDB消息中获取数据)并提交它。 - Giancarlo Sanchez
你好,我正在寻找使用openSmpp客户端的人。对我来说,它的工作很好,除了交付注册。我正在使用maven的3.0.0版本,并将交付设置为0x01似乎对我不起作用。我只得到submit_sm。同步和异步都是如此。如何使其工作?我还期望一些正常的dlr字符串,例如:"id:0123456789 sub:001 dlvrd:001 submit date:0809011130 done date:0809011131 stat:DELIVRD err:000 text:"。 - black sensei

2
我曾经使用过jsmpp和smppapi,发现后者更好,因为当时的jsmpp只有同步阻塞模式(2010年),不确定现在是否仍然如此。
当我连接到的SMPP服务器出现性能问题并响应变慢时,jsmpp的阻塞特性成为了一个大问题。突然间,我发现所有的线程都在等待响应。显然,迁移到smppapi解决了这些问题。

大家好,有人能确认这是否仍然是事实吗(2014年)?谢谢。 - black sensei

2
我们的SMSC是基于Logica SMPP(v 1.3)编写的,即使在企业负载情况下仍能正常工作。主要问题只涉及message_payload库,其他问题我并不记得了。但由于它是一个开源产品,所以很容易修复。
虽然我个人信任Logica的资源,但对于小客户,我使用jsmpp。我同意@Farhan的看法,它更加用户友好,而且开发一个简单的客户端需要更少的时间。

1
我曾在一个生产项目中使用过Logica SMPP。虽然它不再得到积极维护,存在一些固有缺陷导致必须制定解决方案或fork代码库进行修复,但我发现API非常稳定和高效(300msg/s)。
我简要研究了JSMPP,它比Logica拥有更好的API,尽管似乎有大量问题没有得到解决,尽管这些问题已经存在很长时间。
刚刚接触到Cloudhopper SMPP,它似乎以更现代的风格编码,但需要更多示例。仔细阅读代码库并不吸引人。然而,gituhub上的示例正在变得越来越好。

我会在云雀方面表示同意。跟列表里其他的相比,我喜欢他们的一些东西,而且很明显这是最新的努力。不过文档(如果有的话)还有很多需要改进的地方。我正在设计一个完全独立的SMPP实现来供我们使用。这是一个相当大的项目,因为我需要让服务对所有调用实现都保持中立。考虑到SMPP的异步性质,这就像设计一个ESB。如果Cloudhopper在这方面表现出色,我可能会重新考虑使用他们。 - Michael

0

Cloudhopper是最好的选择,Apache的Camel也不错,但它是一个非常庞大的项目,有许多与pdf、salesforce等接口相关的内容,而这些你并不需要。

其他项目已经过时。Cloudhopper由Telestax维护,并添加了一些有用的功能,看起来他们将在未来提供强有力的支持。

以下是用于简化配置Cloudhopper的堆栈: https://github.com/RestComm/smpp-extensions 这是Telestax分支的Cloudhopper(非常更新): https://github.com/RestComm/cloudhopper-smpp 还有JainSlee资源适配器,适用于从事电信领域的人员。 https://github.com/RestComm/jain-slee.smpp


-1

目前我正在使用JSMPP,到目前为止我发现它还不错。Cloudhopper似乎比其他工具更容易使用,但最终我选择了JSMPP,并发现JSMPP也是Apache Camel实现的核心,虽然我可能是错的。


1
目前你的回答不够清晰,请编辑并添加更多细节以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
原始问题可能是答案问题的根源。该问题倾向于讨论或意见格式,也许一开始就不应该被允许。 - bruce szalwinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接