2012-11-14 1 views
1

아주 간단한 자바 애플리케이션을 만들었습니다. (단지 증명 일뿐입니다) ActiveMQ 메시지 브로커에 연결하는 데 문제가 없습니다. 내 Java 응용 프로그램을 테스트하는 데 사용하는 것과 동일한 컴퓨터에 설치됨). 문제는 메시지를 가로 챌 수 없다는 것입니다. 아래와 같이 응용 프로그램에서 messageListener를 설정했지만 적절한 위치에 있는지, 또는 메시지를 인터셉트하는 올바른 방법인지 확신 할 수 없습니다 (예 : "보내기"옵션과 함께 보낸 메시지가 이 게시물의 아래 부분에있는 링크에 설명 된대로 ActiveMQ의 관리 콘솔).XMPP 클라이언트 (매끄럽게)와 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.......................*/ 

이 내 자바 응용 프로그램 대신 불꽃을 (난 이미 불꽃으로 그렇게 할 수 있어요)를 사용하여, 내가하고 싶은 것을 더 이하 : 다음은 MessageListener를위한 코드입니다. ActiveMQ with XMPP

나를 도우려는 모든 사람들에게 감사드립니다!

답변

0

나는 그것이 우연이 아니기를 바랍니다.

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

로 : 나는 대체하는 tryed했습니다

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에 직접 수신기를 배치 할 때 사용됩니다.