Spring集成TCP不';不要发送消息

Spring集成TCP不';不要发送消息,tcp,spring-integration,spring-integration-ip,Tcp,Spring Integration,Spring Integration Ip,我一直在尝试使用Spring集成TCP创建消费者和生产者。我在监听部分取得了一些成功(我通常通过telnet发送消息),但是当我尝试将相同的消息发送到终端客户端时,什么也没有发生 这些是我的课程: @EnableIntegration @IntegrationComponentScan @Configuration public class TcpIntegration { @Value("${tcp.port}") private Integer port;

我一直在尝试使用Spring集成TCP创建消费者和生产者。我在监听部分取得了一些成功(我通常通过telnet发送消息),但是当我尝试将相同的消息发送到终端客户端时,什么也没有发生

这些是我的课程:

@EnableIntegration
@IntegrationComponentScan
@Configuration
public class TcpIntegration {

  @Value("${tcp.port}")
  private Integer port;

  @MessagingGateway(defaultRequestChannel="toTcp")
  public interface Gateway {
    String viaTcp(String in);
  }

  @Bean
  @ServiceActivator(inputChannel="toTcp")
  public TcpSendingMessageHandler tcpOutGate(AbstractClientConnectionFactory connectionFactory) {
    TcpSendingMessageHandler gate = new TcpSendingMessageHandler();
    gate.setConnectionFactory(connectionFactory);
    return gate;
  }

  @Bean
  public TcpReceivingChannelAdapter tcpInGate(AbstractServerConnectionFactory connectionFactory)  {
    TcpReceivingChannelAdapter inGate = new TcpReceivingChannelAdapter();
    inGate.setConnectionFactory(connectionFactory);
    inGate.setOutputChannel(fromTcp());
    return inGate;
  }

  @Bean
  public MessageChannel fromTcp() {
    return new DirectChannel();
  }

  @Bean
  public AbstractClientConnectionFactory clientCF() {
    return new TcpNetClientConnectionFactory("localhost", this.port);
  }

  @Bean
  public AbstractServerConnectionFactory serverCF() {
    return new TcpNetServerConnectionFactory(this.port);
  }
}
TcpListener

@MessageEndpoint
@AllArgsConstructor
public class TcpListener {

  private final Gateway gateway;

  @ServiceActivator(inputChannel = "fromTcp")
  public void convert(String payload) {
    System.out.println(payload);
    gateway.viaTcp(payload);
  }
}

为什么不工作?

您需要通过设置
ip\u connnetionId
头来告诉适配器要在哪个套接字上发送消息

@ServiceActivator(inputChannel=“fromTcp”)
public void convert(字符串有效负载,@Header(IpHeaders.CONNECTION\u ID字符串cid){
系统输出打印项次(有效载荷);
网关.viaTcp(有效载荷,cid);
}
@MessagingGateway(defaultRequestChannel=“toTcp”)
公共接口网关{
@网关(@GatewayHeader(IPHeaders.CONNECTION_ID,“#args[1]”)
字符串viaTcp(字符串输入,字符串cid);
}
编辑

我的语法有点错误;下面是一个工作示例

@springboot应用程序
公共类SO65597331应用程序{
公共静态void main(字符串[]args){
run(So65597331Application.class,args);
}
@MessagingGateway(defaultRequestChannel=“toTcp”)
公共接口门{
@网关(payloadExpression=“#args[0]”,
headers=@GatewayHeader(name=IpHeaders.CONNECTION_ID,expression=“#args[1]”)
字符串viaTcp(字符串输入,字符串cid);
}
@豆子
@ServiceActivator(inputChannel=“toTcp”)
公共TcpSendingMessageHandler tcpOutGate(AbstractServerConnectionFactory connectionFactory){
TcpSendingMessageHandler门=新的TcpSendingMessageHandler();
闸门。设置连接工厂(连接工厂);
返回门;
}
@自动连线
专用网关;
@ServiceActivator(inputChannel=“fromTcp”)
public void convert(字符串有效负载,@Header(IpHeaders.CONNECTION_ID)字符串cid){
系统输出打印项次(有效载荷);
网关.viaTcp(有效载荷,cid);
}
@豆子
公共TCPrevivingChannelAdapter tcpInGate(抽象服务器连接工厂连接工厂){
TCPrecivingChannelAdapter inGate=新的TCPrecivingChannelAdapter();
内浇口设置连接工厂(连接工厂);
inGate.setOutputChannel(fromTcp());
返回内浇道;
}
@豆子
来自TCP()的公共消息通道{
返回新的DirectChannel();
}
@豆子
公共抽象服务器连接工厂服务器cf(){
返回新的TcpNetServerConnectionFactory(1234);
}
}

谢谢Gary,但它不起作用。我添加了这些参数,但结果是一样的。我在服务器上收到消息,但它没有发送到telnet客户端。语法不正确;请参阅。此外,出站适配器需要使用服务器工厂而不是客户端工厂-请参阅对我的答案的编辑。它起作用了!我的主要故障是在连接类型,即您对我说的应该是服务器而不是客户端工厂。非常感谢!
$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
foo
foo
Connection closed by foreign host.