Отправить SMS через SMPP с верблюдом

Какова наилучшая стратегия для отправки SMS через SMPP с помощью Camel? Должен ли я использовать ProducerTemplate?

Я новичок в верблюде, поэтому я не уверен, что моя стратегия лучшая.

В моем приложении после получения SMS я должен отправить другое SMS с некоторым вычисленным содержимым.

Я создал маршрут smsIn, который выглядит так

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

и маршрут smsOut с

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

Маршрут smsIn получает sms, преобразует его содержимое (данные csv) в pojo и отправляет это pojo в myBean.

В myBean я выполняю некоторую обработку, а затем вызываю ProducerTemplate, который отправляет мое вычисленное сообщение в конечную точку «direct:smsOut».

Причина, по которой я использую ProducerTemplate, заключается в том, что мне нужно установить некоторую информацию из моего pojo в заголовке (CamelSmppDestAddr) и в теле Exchange.

Я протестировал симулятор Logica SMSC, он работает нормально, но хотел бы узнать ваше мнение об этом решении?

А надежность, транзакция? Должен ли я сохранить свое сообщение перед попыткой отправить его в SMSC? Должен ли я сохранить его в базе данных, отправить в очередь?


person Frederic Close    schedule 07.06.2012    source источник


Ответы (1)


Я не уверен, почему у вас есть шаблон производителя, вместо этого вы можете просто создать маршрут (учитывая, что вы возвращаете что-то из своего компонента или принимаете 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, вы получаете набор верблюдов, поэтому вы можете запускать маршруты Camel из ActiveMQ.

Возможно, вы захотите настроить, как происходят повторные попытки и обработка ошибок в зависимости от того, что вы хотите (повторять каждую секунду навсегда?, повторять пять раз, затем помещать в очередь ошибок? и т. д.). Прочитайте эту страницу: Обработка ошибок транзакций в Camel

Для получения более подробной информации и дополнительных настроек вы также можете прочитать это: Транзакционный клиент

person Petter Nordlander    schedule 08.06.2012
comment
Я обновил свой вопрос. Причина, по которой я использую производителяTemplate, заключается в том, что служба, указанная как myBean в маршруте smsIn, принимает java Pojo в качестве входных данных. Я должен взять некоторую информацию об этом pojo и установить ее в заголовке обмена и в его теле. - person Frederic Close; 08.06.2012
comment
Хорошо, если вы решите пойти по этому пути, это может быть хорошо. Мой рекомендуемый способ с JMS для постоянства/транзакционности все еще применим. Вы также можете отправлять сообщения JMS с шаблонами, в этом нет ничего страшного. - person Petter Nordlander; 08.06.2012