0

我正在尝试使用 Perl 的 Net::Stomp 向 Active MQ 主题发送消息。另一方面,Java 客户端监视主题并从中获取消息。Active MQ 基于 Spring 框架,我在 Spring config.xml 中定义了以下内容

<amq:transportConnectors>
        <amq:transportConnector name="openwire" uri="tcp://localhost:61616" />
        <amq:transportConnector name="stomp" uri="stomp://localhost:61613" />
</amq:transportConnectors>
<!--  ActiveMQ destinations to use for RTlog Messages -->
<amq:topic id="rTlogDest"  physicalName="RTlogTopic" name="RTlogTopic"/>

从 Perl 发送的消息根本没有被另一端的 Java 客户端接收。perl 代码如下所示。有什么不对吗?

use Net::Stomp;
my $stomp = Net::Stomp->new({hostname => 'localhost', port => '61613'});
$stomp->connect({login => 'admin', passcode => 'password'});

#$stomp->send({destination => 'RTlogTopic', body => 'test message'});

$frame = Net::Stomp::Frame->new(
      { command => 'SEND', 
        headers => { 'destination' => 'RTlogTopic',
                     'timestamp' => time
                   }, 
        body => 'test message' } );

$stomp->send_frame($frame);

$stomp->disconnect;

我也使用过该$stomp->send方法(上面已注释掉),但它也不起作用。然后我在某处读到 STOMP 需要对消息进行构图和发送,因此我对消息进行了构图。MQ Java 侦听器适用于通过 TCP(来自其他 java 客户端)进入端口 61616 的消息,但我无法通过 61613(多个消息生产者)使其适用于 Perl。我搜索了一下,发现很多人都让它在 PHP 到 Java 上工作,但没有一个 Perl 到 Java 的例子。是否有不同的方式需要在 Java 监视器端(消费者)处理 Stomp 消息或通常的 onMessage 实现(如 TCP)应该工作?

4

1 回答 1

2

我实现了向 Activemq 队列发送消息(仅供参考,5.3)。您可以在下面检查代码。

首先,在 stomp-perl 端检查你的目标名称是否正常,它应该类似于“/topic/abc”发送到 Amq 主题 abc。见http://activemq.apache.org/stomp.html

您还可以通过将浏览器指向http://localhost:8161/admin或运行 Amq 的主机来检查您的消息是否在您的队列中或已发布到您的主题中。

希望这可以帮助。

这是示例代码:

#!/usr/bin/perl
use Net::Stomp;

my $msg = "hello world\n";
print $msg

# send a message to the queue 'xyz'

my $stomp = Net::Stomp->new( { hostname => 'localhost', port => '61613' } );
$stomp->connect( { login => 'hello', passcode => 'there' } );
$stomp->send(
   { destination => '/queue/xyz', body => $msg } );
$stomp->disconnect;
于 2012-04-19T10:50:58.333 回答