1

使用 Camel 通过 SMPP 发送 SMS 的最佳策略是什么?我应该使用 ProducerTemplate 吗?

我是骆驼新手,所以我不确定我的策略是否是最好的。

在我收到短信后的应用程序中,我必须发回另一条带有一些计算内容的短信。

我创建了一个 看起来像这样的路由 smsIn

from "uri=smpp ..."
unmarshal ref="bindyDataFormat"
to "uri=bean:myBean

一条 smsOut路线

from "uri=direct:smsOut"
to "uri=smpp ..."

smsIn 路由接收短信,在 pojo 中转换其内容(csv 数据)并将该 pojo 发送到 myBean。

在 myBean 中,我进行一些处理,然后调用 ProducerTemplate 将我计算的消息发送到端点“direct:smsOut”。

我使用 producerTemplate 的原因是我必须在标题 (CamelSmppDestAddr) 和 Exchange 的正文中从我的 pojo 中设置一些信息。

我已经用 logica SMSC 模拟器进行了测试,这似乎工作正常,但想听听您对此解决方案的看法吗?

可靠性、事务性如何?在尝试将其发送到 SMSC 之前,我应该存储我的消息吗?我应该将其存储在数据库中,然后将其发布到队列中吗?

4

1 回答 1

2

我不确定为什么你有一个生产者模板,你可以只建立路由(假设你从你的 bean 返回一些东西或者把一个 Exchange 作为参数)。

<from uri="smpp: ..."/>
  <bean ref="bean:myBean"/>
  <to uri="jms:queue:myQueue"/>

然后不使用直接,而是使用事务性和持久性的 JMS 队列。假设您的 smpp 呼叫失败,则该消息将消失。使用这样的队列并确保其事务性,您可以确保在路由的这个阶段不会丢失数据。

 <from uri="jms:queue:myQueue"/>
   <transactional/>
   <to uri="smpp.."/>

我建议使用 Apache ActiveMQ 作为 JMS 中间件。实际上,如果你下载 ActiveMQ,你会得到骆驼捆绑,所以你实际上可以从 ActiveMQ 运行你的骆驼路由。

您可能希望根据您想要发生的事情来调整重试和错误处理的发生方式(永远每秒重试一次?,重试五次,然后放入错误队列?等等)。阅读本页:Camel 中的事务错误处理

有关更深入的信息和更多的调整,您可能还想阅读以下内容: Transactional Client

于 2012-06-08T04:58:21.627 回答