使用Camel通过SMPP发送短信的最佳策略是什么?我应该使用ProducerTemplate吗?
我是骆驼新手所以我不相信我的策略是否最好。
在收到短信的申请表中,我必须发回一些带有一些计算内容的短信。
我创建了一个 route smsIn ,看起来像这样
from "uri=smpp ..."
unmarshal ref="bindyDataFormat"
to "uri=bean:myBean
和路由smsOut 与
from "uri=direct:smsOut"
to "uri=smpp ..."
smsIn路由,接收短信,在pojo中转换其conent(csv数据)并将该pojo发送给myBean。
在myBean中我做了一些处理,然后调用一个ProducerTemplate,它将我的计算消息发送到端点“direct:smsOut”。
我使用producerTemplate的原因是我必须在标题(CamelSmppDestAddr)和Exchange正文中设置我的pojo中的一些信息。
我已经使用logica SMSC模拟器进行了测试,这似乎工作正常,但是想对此解决方案有什么看法?
可靠性,交易怎么样? 我应该在尝试将其发送到SMSC之前存储我的消息吗? 我应该将它存储在数据库中,将其发布到队列吗?
答案 0 :(得分:2)
我不确定为什么你有一个生产者模板,你可以改为构建路径(假设你从bean返回一些东西或者把Exchange作为参数)。
<from uri="smpp: ..."/>
<bean ref="bean:myBean"/>
<to uri="jms:queue:myQueue"/>
然后不使用direct,而是使用事务性和持久性的JMS队列。假设您的smpp调用失败,消息就会消失。使用这样的队列并确保其事务性,您可以确保在此阶段的路由中不丢失数据。
<from uri="jms:queue:myQueue"/>
<transactional/>
<to uri="smpp.."/>
我建议使用Apache ActiveMQ作为JMS中间件。实际上,如果你下载ActiveMQ,你就会捆绑骆驼,所以你可以从ActiveMQ实际运行你的Camel路由。
您可能想要调整重试和错误处理的发生取决于您想要发生的事情(永远重试每一秒?,重试五次,然后放入错误队列?等)。 阅读本页:Transaction Error handling in Camel
有关更深入的信息和更多调整,您可能还想阅读此内容: Transactional Client