无法从队列中拉出消息
Posted
技术标签:
【中文标题】无法从队列中拉出消息【英文标题】:Unable to Pull Message off Queue 【发布时间】:2015-11-22 05:06:29 【问题描述】:让我解释一下我的配置:
ActiveMQ 5.12.0
AnyPoint Studio 5.2.1
骡子 3.6.1
申请流程:
我正在使用 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”。当我使用 Advance Risk Client 检查时,JSON 消息正确发布。
任何建议将不胜感激。
罗斯
【问题讨论】:
【参考方案1】:使用 MuleClient 时它是 NullPayload,因为默认情况下,http 操作将是 GET 并且不会期望解析正文。
MuleClient 更适合使用 Mule 传输基础架构,例如 JMS 传输或旧的 http 传输。我不认为它与新的 http 侦听器模块配合得很好。
通常使用传输,您可以通过属性设置方法,但这似乎不适用于 http:listener:
MuleMessage message = getTestMuleMessage();
message.setPayload(productAsJson);
message.setProperty("http.method", "POST", PropertyScope.INBOUND);
client.send("http://localhost:8089/products", message);
我建议使用标准 HTTP 客户端,例如 Apache HTTP 客户端等,并将方法设置为 POST/PUT 或您需要使用的任何需要正文的方法。
【讨论】:
奇怪的是,它同时适用于 PropertyScope.INBOUND 和 PropertyScope.OUTBOUND,知道为什么吗? 谢谢! 昨天摸了摸头,我按照你的建议换了一个HttpClient。我能够毫无问题地发布信息。我能够使用 mule 客户端毫无问题地将消息从队列中拉出。以上是关于无法从队列中拉出消息的主要内容,如果未能解决你的问题,请参考以下文章