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 リスナーは、(他の Java クライアントから) TCP 経由でポート 61616 に着信するメッセージに対して正常に動作しますが、Perl から 61613 (複数のメッセージ プロデューサー) に対しては動作させることができません。私がグーグルで検索したところ、多くの人が PHP から Java への変換を行っていることがわかりましたが、Perl から Java への変換の例は 1 つもありませんでした。Stomp メッセージを Java モニター側 (コンシューマー) で処理する必要がある、または通常の onMessage 実装 (TCP など) が機能する別の方法はありますか?

4

1 に答える 1

2

Activemqキュー(fyi、5.3)にメッセージを送信することに成功しました。以下でコードを確認できます。

まず、宛先名がstomp-perl側で問題ないことを確認します。これは、Amqトピックabcに送信する「/ topic/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 に答える