我如何使用 Node.js 到 post 消息到 ActiveMQ 使用它的 REST 接口?

How can I use Node.js to post messages to ActiveMQ using its REST interface?

我在 Node.js 中有一个 STOMP 客户端 运行,订阅了 ActiveMQ 中的 queue。使用 cURL 时,我可以使用以下命令将 post 消息发送到 queue(我在 Node 中有 运行 的 STOMP 客户端会立即使用这些消息):

curl -d "body=message" http://sub.dummyhost.net:8161/demo/message/dispatch?type=queue

我正在尝试使用 Node.js 的请求模块 (https://github.com/request/request) 重现此 POST 请求,使用以下代码,该代码符合我们应该如何发送 POST 请求 application/x-www-form-urlencoded 数据:

request.post({
        url: 'http://sub.dummyhost.net:8161/demo/message/dispatch?type=queue',
        form: {
            body:'message'
        }
    }, 
    function(err, response, body){
      //do something with response
    });

在响应的 headers 属性 中,我可以看到 message-id 属性,每次我发出 POST 请求时它都会递增上面的函数调用。但是,当我检查代理本身的管理视图时,我没有看到 enqueued 和 dequeued 消息递增(并且我的 STOMP 消费者没有收到任何东西,这与我 POST 使用 cURL 请求)。这些消息似乎根本没有发布到 queue。

我在这里错过了什么?

var options = { method: 'POST',
  url: 'http://sub.dummyhost.net:8161/demo/message/dispatch?type=queue',
  headers: 
   { 'cache-control': 'no-cache',
     'content-type': 'multipart/form-data' },
  form: { body: 'message' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

试试这个~

出于某种原因,ActiveMQ 不喜欢我使用 request.post 和以这种方式格式化的选项。当我将 URL 作为第一个选项传入时,它似乎工作正常:

  var promisifiedPostRequest = Promise.promisify(request.post);
  return promisifiedPostRequest(
    'http://localhost:8080/demo/message/queue1?type=queue', 
    {
      form : {
        body: JSON.stringify(notification),
        AMQ_SCHEDULED_DELAY : delay
    }
  })
  .then(function(response){
    return response.headers.messageid;
  });

我写了一篇关于 REST、Node.js 和 ActiveMQ 的博客 post:https://medium.com/@mackplevine/using-activemq-with-node-js-stomp-and-http-b251ce8d995#.4qf53glie