如何在 Node JS 中为 ActiveMQ 编写发送方应用程序

Posted

技术标签:

【中文标题】如何在 Node JS 中为 ActiveMQ 编写发送方应用程序【英文标题】:How to write a sender application for ActiveMQ in Node JS 【发布时间】:2015-04-19 00:47:56 【问题描述】:

我想创建一个用于消息传递的 JMS 发送应用程序,并使用 JAVA 创建了相同的应用程序。这是我的 Java 示例代码 sn-p。

    try 
        factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        destination = session.createQueue("SAMPLEQUEUE");
        producer = session.createProducer(destination);
        try 

                TextMessage message = session.createTextMessage();
                message.setText("hello");
                producer.send(message);
                System.out.println("Sent: " + message.getText());

         catch (IOException e) 
            e.printStackTrace();
        
     catch (JMSException e) 
        e.printStackTrace();
    

这很好用,我也可以用我的接收器接收消息。我想更改 Node JS 中的发送者实现并使其成为 Node JS 应用程序。在 Node JS 中搜索 ActiveMQ 后,我对 Node JS 并不了解。任何指向它的指针都会很有帮助。

问候, 苏汉卡

编辑

我在节点 JS 中使用了 stomp。示例代码如下:

var Stomp = require('stomp-client');
var destination = '/queue/sensorstreamqueue';
var client = new Stomp('10.53.219.153', 61613, 'user', 'pass');
var     lazy    = require("lazy"),
        fs  = require("fs");



client.connect(function(sessionId) 
new lazy(fs.createReadStream('input.csv'))
     .lines
     .forEach(function(line)
         client.publish(destination, line.toString());
     
 );   
    console.log("published");
);

代码有效,我的接收者也收到了消息,但是我的接收者认为它是 textMesssage 格式并给出以下错误:

02-19-2015 08:42:31.288 ERROR [Thread-25] (JmsInputTransporter.handleTextMessage) Error code:401306, Severity : 3 (Error)
Error message:JMS Transporter is expected a TextMessage, received class org.apache.activemq.command.ActiveMQBytesMessage.
Error description:JMS Transporter is expected a TextMessage, received class org.apache.activemq.command.ActiveMQBytesMessage.

有人可以帮助我如何实现这一目标吗?

【问题讨论】:

你能附上你的接收者代码吗? 嗨 Josh,很遗憾,接收方是我不拥有的组件的一部分,并且希望消息采用文本消息格式 对于投了反对票的人,如果你能解释一下你不喜欢这个问题的地方,那就太好了。或许我下次可以改进!! 我注意到我正在处理的类似问题。通过 stomp-client 发送消息最终在 Java 应用程序中作为 content 属性中的 ByteSequence,但在 text 属性中应该是纯文本。如果我发现了什么,我会回来查看。 【参考方案1】:

您可以尝试activemq-node 模块,也可以在ActiveMQ 上启用STOMP protocol 并使用this node.js 库。

【讨论】:

嗨乔希,非常感谢您的帮助。我尝试使用 stomp 并且它有效。但是我遇到了一个小问题,您能否查看我的编辑以获取更多详细信息并帮助我?【参考方案2】:

你需要添加一个标题:

client.publish(destination, 'your content', 
    "amq-msg-type": "text"
);

https://issues.apache.org/jira/browse/AMQ-2833

【讨论】:

以上是关于如何在 Node JS 中为 ActiveMQ 编写发送方应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cpanel 中为 Node.js 应用程序配置端口?

如何在node.js中为对象动态添加属性?

如何在 node.js 中为给定的示例数据创建测试用例?

如何在 binding.gyp node-gyp 中为 node.js 扩展添加对静态库的依赖

如何在 vue.config.js 中为 node_modules 添加 sass 加载器

如何在 Mule XA 事务中为 ActiveMQ 启用 RedeliveryDelay