2017-03-21 5 views
1

チャットは、これは私が試したものですXMPPのSpring統合 - 私は耳を傾け、XMPPを使用してメッセージを送信するために、ばねブートでサーバを作成しようと、XMPPに新しいです

の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; 
    } 
} 

この設定を行うと、ChatMessageListening.send()メソッドでメッセージを受け取ることができます。

私は、使用してメッセージを送信しようとした

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); 

しかし、それは、クライアントに送信していないが、それはChatMessageSendingに受け取ります。私が間違っていることを教えてください。私は何を使用する必要があります。

答えて

2

あなたはMessageChannel奇妙な方法を使用します。

は、問題のあなたのビジョンを修正するために検討してください: EIP definitionと春の統合implementation

プロデューサーはチャネルにメッセージを送信し、消費者は、チャネルからメッセージを受け取ります。

メッセージチャネルはlistenerにすることはできません。したがって、sendingのようにすることはできません。

コンフィグレーションに<channel>という2つのみを宣言し、適切な<service-activator>を使用してXMPPからメッセージを処理し、メッセージを生成する必要があります。

はい、MessagingTemplateは送信に使用できますが、<int-xmpp:outbound-channel-adapter>が加入者となる適切なMessageChannelビーンを指摘する必要があります。

現在、ChatMessageSendingには無効な実装があり、ターゲットチャネルアダプタとの配線はありません。

途中でXMPP sampleがあります。

+0

XMPPサンプルリンクありがとうございました。私は別のチャネルを作成し、インバウンド・チャネル・アダプターとアウトバウンド・チャネル・アダプターの両方にサービス・アクティベーターを別々に作成して、メッセージの受信と送信を行いました。 –

+1

素晴らしい!したがって、これを考慮してください:http://stackoverflow.com/help/someone-answers –

関連する問題