如何将TCP出站网关扩展为仅在Spring Integration中接收消息

时间:2017-09-03 07:47:06

标签: java spring tcp spring-integration

我正在开发一个支持Spring Integration的TCP连接的Web应用程序。 它有两个功能。

  1. 一次向服务器发送消息并从服务器接收回复
  2. 只接收来自服务器的消息
  3. (服务器上的应用程序不是由Spring Integration开发的。)

    在这种情况下,应该使用TCP适配器,我需要提供协作TCP出站和入站通道适配器。 但是,我的申请有一些限制。

    1. 此应用程序没有数据库。
    2. 消息'已指定有效载荷格式。 (这意味着我无法将任何相关数据(如事务ID)添加到有效负载。
    3. 因此,我认为协作TCP出站和入站通道适配器很困难。然后,我计划扩展TCP Outbound网关以添加仅接收消息功能。 我应该如何延长它? (或者您有其他想法吗?)

      提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您可以确定消息类型,那么这样的事情应该有效......

public class ExtendedTcpOutpboundGateway extends TcpOutboundGateway {

    private final MessageChannel unsolicitedMessageChannel;


    public ExtendedTcpOutpboundGateway(MessageChannel unsolicitedMessageChannel) {
        this.unsolicitedMessageChannel = unsolicitedMessageChannel;
    }

    @Override
    public boolean onMessage(Message<?> message) {
        if (isUnsolicitedMessage(message)) {
            this.messagingTemplate.send(this.unsolicitedMessageChannel, message);
            return false;
        }
        else {
            return super.onMessage(message);
        }
    }

    private boolean isUnsolicitedMessage(Message<?> message) {
        // TODO Add logic here to determine message type
        return false;
    }

}

如果你无法区分,那么你不清楚如何实现你的要求。