2015-08-27 76 views
1

讓我解釋一下我的配置:無法拉斷的消息隊列

  1. 的ActiveMQ 5.12.0
  2. AnyPoint工作室5.2.1
  3. 騾子3.6.1

    流量應用:

Config

我正在使用FunctionalTestCase從隊列中發佈和檢索消息。

MuleClient client = muleContext.getClient(); 
String productAsJson = "{\"name\":\"Widget\", \"price\":9.99, \"weight\":1.0, \"sku\":\"abcd-12345\"}"; 
client.dispatch("http://localhost:8081/products", productAsJson, null); 
MuleMessage result = client.request("jms://products", RECEIVE_TIMEOUT); 

正在發生的事情是越來越被張貼的消息,但是當我嘗試找回它,我得到的字符串「{} NullPayLoad」。

在回到流程之後,我發現消息有效載荷在使用Mule客戶端時不在隊列中。在查看ActiveMQ的管理控制檯時,我發現消息詳細信息是「{NullPayload}」。當我使用高級風險客戶端進行檢查時,JSON消息正確發佈。

任何建議將不勝感激。

拉斯

回答

3

它使用MuleClient時,因爲默認情況下,HTTP操作將是GET和不會被期待的身體解析是NullPayload。

MuleClient更適合與Mule傳輸基礎設施(如JMS傳輸或舊的http傳輸)一起使用。我不認爲它與新的HTTP監聽器模塊很好。

你可以通過屬性設置的方法傳輸但那不

通常似乎與HTTP工作:聽衆:

 MuleMessage message = getTestMuleMessage(); 
     message.setPayload(productAsJson); 
     message.setProperty("http.method", "POST", PropertyScope.INBOUND); 

     client.send("http://localhost:8089/products", message); 

我會如Apache HTTP客戶端等建議使用標準的HTTP客戶端並將該方法設置爲POST/PUT或其他您需要使用的方法。

+0

好奇地這個工作與PropertyScope.INBOUND和PropertyScope.OUTBOUND,任何想法爲什麼? –

+0

**謝謝!**昨天我撓頭後,我按照你的建議,改爲HttpClient。我能夠發佈沒有問題的信息。我能夠使用mule客戶端將消息從隊列中拉出來,沒有任何問題。 – rray