2012-06-07 202 views
1

通過SMPP與駱駝發送短信的最佳策略是什麼?我應該使用ProducerTemplate嗎?通過SMPP與駱駝發送短信

我是新來的駱駝,所以我沒有信心,如果我的策略是最好的。

在我的應用程序接收到一條短信時,我必須發回其他短信與一些計算的內容。

我創建了一個 路線smsIn,看起來像這樣

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

路線smsOut

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

的smsIn路線,接收短信,將其輸入conent(CSV數據),並將該pojo發送給myBean。

在myBean中,我做了一些處理,然後調用一個ProducerTemplate將我的計算消息發送到端點「direct:smsOut」。

我使用producerTemplate的原因是我必須在標題(CamelSmppDestAddr)和Exchange主體中設置一些來自我的pojo的信息。

我已經測試了邏輯SMSC模擬器,這似乎工作正常,但想要對此解決方案有你的意見?

可靠性,交易情況如何? 在嘗試將它發送到SMSC之前,我應該存儲我的消息嗎? 我應該將它存儲在數據庫中,並將其發佈到隊列中嗎?

回答

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運行你的駱駝路線。

您可能想調整重試和錯誤處理的方式取決於您想要發生什麼(每秒重試一次?,重試五次,然後放入錯誤隊列?等)。 閱讀此頁:Transaction Error handling in Camel

對於更深層次的信息和更多的調整,您可能還需要閱讀此: Transactional Client

+0

我更新了我的問題。我使用producerTemplate的原因是,在smsIn路由中引用爲myBean的服務將java Pojo作爲輸入。我必須把這個pojo的一些信息放在交換頭和它的身上。 –

+0

好的,如果你選擇這樣做,那可能很好。我推薦的使用JMS進行持久化/事務處理的方式仍然適用。您也可以使用模板發送JMS消息,沒有什麼大不了的。 –