2012-11-14 62 views
1

我已经做了一个非常简单的Java应用程序(这只是一个证明),我没有问题连接到我的ActiveMQ消息布洛克(这是安装在我用来测试我的Java应用程序的同一台机器上)。 问题是我无法拦截任何消息。 我已经在我的应用程序中设置了一个messageListener,如下所示,但我不确定它是否在正确的位置,也没有正确的方法来拦截邮件(例如,发送邮件时使用“发送到”选项如本文下半部分的链接所述,ActiveMQ的管理控制台)。 下面是消息监听代码:XMPP客户端(与smack)和ActiveMQ,如何拦截“adminConsole”消息

/*................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.......................*/ 

这或多或少是我想做的事情,用我的Java应用程序,而不是火花(我已经能够做到这一点火花)。 ActiveMQ with XMPP

感谢所有想帮助我的人!

回答

0

我希望它不仅是一种侥幸。我tryed更换:

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) 

和现在的工作听众好!

1

我不知道ActiveMQ如何处理XMPP,但ActiveMQ很可能不会基于您创建的同一个聊天向您发送消息。聊天使用线程ID进行协调,如果MQ使用不同的聊天或根本不发送,则可能与您创建的聊天不匹配,因此不会与您的聊天人呼叫

尝试adding a listener to the ChatManager,以获取通知新的传入聊天,并尝试运行-Dsmack.debugEnabled = true以确保您实际上是从ActiveMQ接收数据包。

顺便说一句,你的PacketFilter没有在这种情况下使用,当你把一个监听器直接放在Connection上的时候使用它。