通过node.js / stompit将数据发送到ActiveMQ

时间:2017-04-05 08:02:09

标签: node.js activemq

希望那里有人可以帮我这个!

任务: 将xml文件发送到ActiveMQ。

环境:

开发:

  • OS X 10.10.5
  • node 4.4.3
  • stompit 0.25.0

生产:

  • Ubuntu 16.04
  • 节点7.8.0(尝试4.4.3,结果相同)
  • stompit 0.25.0

我总是以这种方式联系。

var server1 = { 'host': 'activemq-1.server.lan' };
var server2 = { 'host': 'activemq-2.server.lan' };
var servers = [server1, server2];
var reconnectOptions = { 'maxReconnects': 10 };
var manager = new stompit.ConnectFailover(servers, reconnectOptions);

标题,我为每一帧设置:

const sendHeaders = {
    'destination'   : '/queue/name_of_queue',
    'content-type'  : 'text/plain',
    'persistent'    : 'true'
};

我不允许设置内容长度标头,因为这会强制服务器将流解释为二进制流。

当连接到服务器时,我连接到PostgreSQL服务器以获取要发送的数据。

什么有效:

var frame = client.send(sendHeaders);
frame.write(row.pim_content);
frame.end();

但它只适用于开发机器。在生产环境中运行此脚本时,脚本运行时不会抛出错误,但从不将消息发送到服务器。

所以我尝试了另一种方法,只是在服务器收到消息时进行回调。

var channel = new stompit.Channel(manager);
channel.send(sendHeaders, xml_content, (err)=>{ 
    if(err){
        console.log(err); 
    } else {
        console.log('Message successfully transferred');
    }
});

现在我得到了相同的生产和开发结果。它按预期工作,但是......

只有正文(xml_content)的最大长度为1352个字符时,它才有效。当添加一个额外的字符时,channel.send()的回调永远不会被触发。

我已经没有想法接下来要检查/测试什么了。我希望有人在读这个,笑着指着我正确的方向。任何想法都非常感谢!

提前致谢, 斯蒂芬

0 个答案:

没有答案