我如何使用 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
我在 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