1

私は非常に単純な Java アプリケーションを作成しました (これは証明にすぎません)。ActiveMQ メッセージ ブロッカー (Java アプリケーションのテストに使用しているのと同じマシンにインストールされています) に問題なく接続できました。問題は、メッセージを傍受できないことです。以下のようにアプリケーションに messageListener を設定しましたが、それが適切な場所にあるのか、メッセージを傍受する正しい方法なのかわかりません (たとえば、管理者で利用可能な「送信先」オプションを使用して送信されたメッセージこの投稿の下部にあるリンクで説明されている ActiveMQ のコンソール)。messageListener のコードは次のとおりです。

/*................previous code is not relevant.................*/
ConnectionConfiguration config = new ConnectionConfiguration("192.168.43.5",61222); //to get my XMPP connector uri
String msg="";
config.setSASLAuthenticationEnabled(false);
config.setCompressionEnabled(false);
XMPPConnection xmpp = new XMPPConnection(config);

try {

    xmpp.connect(); 
    xmpp.login("name", "pw");
        /*Filter*/
    PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 
        /*MessageListener to get messages*/             
    MessageListener listen = new MessageListener() {
        @Override
        public void processMessage(Chat arg0, Message arg1) {
            // TODO Auto-generated method stub
            msg = "ok ";
            msg = arg1.toString();
            }
        };
    /*New chat with my messageListener*/
        Chat c = xmpp.getChatManager().createChat("admin", listen) ;
        c.sendMessage("enter text here");
    }
     catch (XMPPException e) {  
}
/*...............other code.......................*/

これは多かれ少なかれ私がやりたいことであり、spark の代わりに私の Java アプリケーションを使用します (私はすでに spark でそれを行うことができます)。 XMPP を使用した ActiveMQ

私を助けてくれるすべての人に感謝します!

4

3 に答える 3

1

XMPP に関して ActiveMQ がどのように機能するかはわかりませんが、作成した同じチャットに基づいて ActiveMQ がメッセージを送信していない可能性が非常に高いです。チャットはスレッド ID を使用して調整されます。MQ が別の ID を使用して送信している場合、またはまったく送信していない場合、作成したチャットと一致しない可能性があるため、リスナーを呼び出しません。

ChatManagerにリスナーを追加して、新しい着信チャットの通知を受け取り、 -Dsmack.debugEnabled=trueで実行して、実際に ActiveMQ からパケットを受信して​​いることを確認してください。

ところで、このシナリオでは PacketFilter は使用されません。これは、リスナーを接続に直接配置するときに使用されます。

于 2012-11-14T14:36:28.437 に答える
0

ただのまぐれではないことを願っています。私は置き換えようとしました:

PacketFilter filter = new MessageTypeFilter(Message.Type.chat); 

と:

PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class));

そして、私は置き換えました:

MessageListener listen = new MessageListener() {
    @Override
    public void processMessage(Chat arg0, Message arg1)

と:

PacketListener ls= new PacketListener() {
@Override
public void processPacket(Packet arg0) 

リスナーがうまく機能するようになりました。

于 2012-11-15T07:35:08.083 に答える