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 など) が機能する別の方法はありますか?