2017-03-21 4 views
1

Ich bin neu in XMPP, versuchen, einen Server im Frühjahr-Boot erstellen Nachricht zu hören und senden XMPP verwenden, ist es das, was ich versuchte,XMPP Frühling Integration - Chat

context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/integration" 
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:int-xmpp="http://www.springframework.org/schema/integration/xmpp" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/integration/xmpp 
    http://www.springframework.org/schema/integration/xmpp/spring-integration-xmpp.xsd"> 

    <int-xmpp:xmpp-connection 
     id="xmppConnection" 
     user="[email protected]" 
     password="finatel123" 
     host="192.168.1.201" 
     port="5222"/> 

    <int-xmpp:inbound-channel-adapter 
     id="xmppInboundAdapter" 
     channel="chatMessageListening" 
     xmpp-connection="xmppConnection" 
     auto-startup="true"/> 

    <int-xmpp:outbound-channel-adapter 
     id="outboundEventAdapter" 
     channel="chatMessageSending" 
     xmpp-connection="xmppConnection" 
     auto-startup="false"> 
     <poller fixed-rate="5000" max-messages-per-poll="1"/> 
    </int-xmpp:outbound-channel-adapter> 

</beans:beans> 

ChatMessageListening.java

public class ChatMessageListening implements MessageChannel { 

    @Override 
    public boolean send(Message<?> message) { 

     MessageHeaders headers = message.getHeaders(); 

     System.out.println("FROM : "+headers.get(XmppHeaders.FROM)); 
     System.out.println("TO  : "+headers.get(XmppHeaders.TO)); 
     System.out.println("Time : "+new Date((Long)headers.get("timestamp"))); 

     return true; 
    } 

    @Override 
    public boolean send(Message<?> message, long timeout) { 
     return true; 
    } 
} 

ChatMessageSending.java

public class ChatMessageSending implements PollableChannel { 

    @Override 
    public boolean send(Message<?> message) { 
     return true; 
    } 

    @Override 
    public boolean send(Message<?> message, long timeout) { 
     return true; 
    } 

    @Override 
    public Message<?> receive() { 
     return null; 
    } 

    @Override 
    public Message<?> receive(long timeout) { 
      return null; 
    } 
} 

Mit diesen Konfigurationen kann ich die Nachricht unter ChatMessageListening.send() Methode erhalten. mit

Ich habe versucht, Nachricht zu senden,

MessagingTemplate template = new MessagingTemplate(); 
template.setSendTimeout(5000L); 

Message<String> xmppOutboundMsg = MessageBuilder.withPayload("Hello, XMPP!") 
    .setHeader(XmppHeaders.FROM, "[email protected]") 
    .setHeader(XmppHeaders.TO, "[email protected]") 
    .setHeader(XmppHeaders.TYPE, "chat") 
    .build(); 
template.setDefaultChannel(new ChatMessageSending()); 
template.send(xmppOutboundMsg); 

Aber es sendet nicht an den Client, sondern es auf die ChatMessageSending erhalten. Bitte führe mich, was ich falsch mache. Was ich benutzen muss.

Antwort

2

Sie verwenden MessageChannel seltsame Art und Weise.

Bitte betrachten Sie Ihre Vision über die Angelegenheit zu revidieren: EIP definition und Spring Integration implementation:

Producers Nachrichten an einen Kanal senden, und die Verbraucher erhalten Nachrichten von einem Kanal.

So Nachrichtenkanal kann keine listener sein und nicht so etwas wie sending sein kann.

Sie müssen nur ein paar <channel> in Ihrer Konfiguration und verwenden Sie eine entsprechende <service-activator>, um Nachrichten von der XMPP und einige andere Nachrichten zu produzieren verarbeiten.

Ja, MessagingTemplate kann die Verwendung für das Senden, aber Sie müssen die richtige MessageChannel Bohne zeigen, wo Ihr <int-xmpp:outbound-channel-adapter> Teilnehmer sein wird.

Im Moment hat Ihr ChatMessageSending eine ungültige Implementierung und es gibt keine Verkabelung mit dem Zielkanaladapter.

Es gibt ein XMPP sample für Sie übrigens.

+0

Vielen Dank für den XMPP-Beispiellink. Ich habe einen separaten Kanal und separaten Service-Aktivator für Inbound-Channel-Adapter und Outbound-Channel-Adapter erstellt, um Nachrichten abhören und senden zu können. –

+1

Großartig! Betrachten Sie dies deshalb: http://stackoverflow.com/help/someone-answers –

Verwandte Themen