微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Integration TCP 不发送消息

如何解决Spring Integration TCP 不发送消息

我一直在尝试使用 Spring Integration 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_connnetionId 标头来告诉适配器在哪个套接字上发送消息。

  @ServiceActivator(inputChannel = "fromTcp")
  public void convert(String payload,@Header(IpHeaders.CONNECTION_ID String cid) {
    System.out.println(payload);
    gateway.viaTcp(payload,cid);
  }
  @MessagingGateway(defaultRequestChannel="toTcp")
  public interface Gateway {
    @Gateway(@GatewayHeader(IPHeaders.CONNECTION_ID,"#args[1]"))
    String viaTcp(String in,String cid);
  }

编辑

我的语法有点不对;这是一个工作示例...

@SpringBootApplication
public class So65597331Application {

    public static void main(String[] args) {
        SpringApplication.run(So65597331Application.class,args);
    }

    @MessagingGateway(defaultRequestChannel = "toTcp")
    public interface Gate {
        @Gateway(payloadExpression = "#args[0]",headers = @GatewayHeader(name = IpHeaders.CONNECTION_ID,expression = "#args[1]"))
        String viaTcp(String in,String cid);
    }

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

    @Autowired
    private Gate gateway;

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

    @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 AbstractServerConnectionFactory serverCF() {
        return new TcpNetServerConnectionFactory(1234);
    }

}
$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
foo
foo
Connection closed by foreign host.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?