2016-12-18 11 views
0

私は完璧なクライアント/サーバアプリケーションを作成したいと思うのはSpring Integrationです。私はサーバーがメッセージを受信し、クライアントに応答を送る部分を持っています。バネ統合tcpサーバ

随時情報を記載したメッセージをクライアントに送信したいと考えています。 TcpConnectionEventで受け取ったconnectionIdでヘッダーを設定しましたが、何も起こりません。コードには私のコードがあります。私は数日からこの問題を積み重ねます。どんなハーフにも感謝します!

<!-- CLIENT SIDE --> 

<int:gateway id="gw" 
    service-interface="com.app.hos.service.client.Gateway" 
    default-request-channel="input"/> 

<int-ip:tcp-connection-factory id="client" 
    type="client" 
    host="localhost" 
    port="14020" 
    single-use="false" 
    so-timeout="10000" 
    /> 

<int:channel id="input" /> 

<int-ip:tcp-outbound-gateway id="outGateway" 
    request-channel="transformChannel" 
    reply-channel="reply" 
    connection-factory="client" 
    request-timeout="10000" 
    reply-timeout="10000" 
    /> 
<int:channel id="transformChannel" /> 

<int:channel id="reply" datatype="java.lang.String" /> 

<!-- TRANSFORMERS --> 
<int:transformer id="testTransformer" ref="testTransformerBean" input-channel="input" 
     method="transform" output-channel="transformChannel"/> 

<bean id="testTransformerBean" class="com.app.hos.service.integration.Transformer" /> 

<!-- SERVER SIDE --> 

<bean id="connectionSerializeDeserialize" class="com.app.hos.service.integration.ByteArrayToStringConverter"/> 

<int-ip:tcp-connection-factory id="hosServer" 
    type="server" 
    port="14020" 
    serializer="connectionSerializeDeserialize" 
    deserializer="connectionSerializeDeserialize" 
    using-nio="true"/> 

<int-ip:tcp-inbound-gateway id="inputHosGateway" 
    connection-factory="hosServer" 
    request-channel="toServerChannel" 
    error-channel="errorChannel"/> 


<int:channel id="toServerChannel"/> 

<int:channel id="errorChannel"/> 

<int:channel id="inputChannel" /> 

<int:service-activator input-channel="toServerChannel" 
    ref="server" 
    method="serverTest"/> 

<bean id="server" 
    class="com.app.hos.service.server.Server" /> 


<!-- TCP EVENTS --> 

<int:service-activator input-channel="eventChannel" 
    ref="event" 
    method="eventTest"/> 

<bean id="event" 
    class="com.app.hos.service.integration.Event" /> 

<int:channel id="eventChannel"/> 

<int-event:inbound-channel-adapter channel="eventChannel" 
       event-types="org.springframework.integration.ip.tcp.connection.TcpConnectionEvent"/> 

私はconnectionId設定Transforemr:私はゲートウェイでメッセージを送信しようと

@Autowired 
public Event event; 

public Message<String> transform(Message<String> msg) { 

    Message<String> newMessage = MessageBuilder.withPayload(msg.getPayload()) 
      .setHeader(IpHeaders.CONNECTION_ID, event.getConncetionId()) 
      .copyHeadersIfAbsent(msg.getHeaders()) 
      .build(); 
    return newMessage; 
} 

MVCコントローラ:

@Autowired 
public TestController(Gateway gateway) { 
    this.gateway = gateway; 
} 

@RequestMapping(value = "/showTest", method=RequestMethod.GET) 
public String showTestPage() { 
    return "test/sendMessageTest"; 
} 

@RequestMapping(value = "/sendMessage", method=RequestMethod.GET) 
public void sendMessage() { 
    gateway.send("Working!"); 
} 

答えて

0

任意のデータを送信するときは、ゲートウェイを使用することはできませんが彼らは厳密に要求/応答メッセージのためのものです。

いずれの場合でも、全く異なる接続に送信しています。

インバウンドゲートウェイの代わりに、インバウンドチャネルアダプタとアウトバウンドチャネルアダプタ(サーバー接続ファクトリを共有する)が必要です。

任意のデータ(要求/応答の一部ではない)を送信する場合は、適切な接続IDヘッダーを設定して、ouboundチャネルアダプタにメッセージを送信します。

0

ありがとうございました!それは解決策です:

<int:channel id="input" /> 

<int-ip:tcp-outbound-channel-adapter id="outboundChannel" 
    channel="transformChannel" 
    connection-factory="hosServer" /> 

<int-ip:tcp-inbound-channel-adapter id="inboundChannel" 
    channel="toServerChannel" 
    connection-factory="hosServer" 
    /> 


<int:channel id="transformChannel" /> 

<int:channel id="reply" datatype="java.lang.String" /> 

<!-- TRANSFORMERS --> 
<int:transformer id="testTransformer" ref="testTransformerBean" input-channel="input" 
     method="transform" output-channel="transformChannel"/> 

<bean id="testTransformerBean" class="com.app.hos.service.integration.Transformer" /> 

<!-- SERVER SIDE --> 

<bean id="connectionSerializeDeserialize" class="com.app.hos.service.integration.ByteArrayToStringConverter"/> 

<int-ip:tcp-connection-factory id="hosServer" 
    type="server" 
    port="14020" 
    serializer="connectionSerializeDeserialize" 
    deserializer="connectionSerializeDeserialize" 
    using-nio="true"/> 


<int:channel id="toServerChannel"/> 

<int:channel id="errorChannel"/> 

<int:channel id="inputChannel" /> 

<int:service-activator input-channel="toServerChannel" 
    ref="server" 
    method="serverTest"/> 

<bean id="server" 
    class="com.app.hos.service.server.Server" /> 


<!-- TCP EVENTS --> 

<int:service-activator input-channel="eventChannel" 
    ref="event" 
    method="eventTest"/> 

<bean id="event" 
    class="com.app.hos.service.integration.Event" /> 

<int:channel id="eventChannel"/> 

<int-event:inbound-channel-adapter channel="eventChannel" 
       event-types="org.springframework.integration.ip.tcp.connection.TcpConnectionEvent"/> 

関連する問題