无法从队列中拉出消息

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 客户端毫无问题地将消息从队列中拉出。

以上是关于无法从队列中拉出消息的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Oracle Advanced 异常队列中删除消息

对何时使用 JMS(或一般的队列)与数据库感到困惑

将 MQ 消息从一个队列复制到另一个队列

C IPC - 无法从队列接收消息

如何使用 PowerShell 从 MSMQ 消息队列中删除特定消息

Amazon SQS:两个当前消费者使用相同的消息