TCP-клиент Spring Integration не может поддерживать соединение после отправки байтового потока - PullRequest
0 голосов
/ 01 мая 2020

Я новичок в весенних интеграционных TCP-соединениях. Я написал TCP-клиент TcpSendingMessageHandler и TcpReceivingChannelAdapter, используя DirectChannel для связи с TCP-сервером, который является программой-сокетом и всегда прослушивает порт. Но здесь проблема в том, что выходной канал подключается к серверу и может отправлять поток байтов один раз, и после этого я не вижу никакой связи между клиентом и сервером, но не выдается никакой ошибки. Пожалуйста, помогите мне всегда подключать клиент к серверу. Я ценю вашу помощь.



    private static final Logger logger = LoggerFactory.getLogger(GatewayConfig.class);
    @Autowired
    private GatewayProperties properties;

    /**
     * 
     * @return
     */

    @Bean
    public AbstractClientConnectionFactory clientCF() {
        logger.info("vendor connection host:{} and port:{}", properties.getHost(), properties.getPort());

        AbstractClientConnectionFactory factory = new TcpNetClientConnectionFactory("localhost", 5030);
        factory.setSingleUse(false);
        factory.setSoKeepAlive(true);
        factory.setSerializer(new ByteArraySingleTerminatorSerializer((byte) 13));
        factory.setDeserializer(new ByteArraySingleTerminatorSerializer((byte) 13));
    //  factory.setMapper(new TcpMessageMapper());
        return factory;
    }



    /**
     * 
     * @param connectionFactory
     * @return
     */
    @Bean
    public TcpReceivingChannelAdapter inboundAdapterClient(@Qualifier("clientCF")AbstractClientConnectionFactory connectionFactory) {
        TcpReceivingChannelAdapter adapter = new TcpReceivingChannelAdapter();
        adapter.setOutputChannelName(GatewayConstants.PRETRANSFORM_CHANNEL);
        adapter.setErrorChannelName(GatewayConstants.TCP_ERROR);
        adapter.setClientMode(true);
        adapter.setConnectionFactory(connectionFactory);
        return adapter;
    }

    @PostConstruct
    public void postConstruction() {
        logger.info(" batch client configuration");
    }

    @Bean(GatewayConstants.RECEIVE_CHANNEL_NAME)
    public QueueChannel receivingChannel() {

        return new QueueChannel();
    }

    @Bean
    @Transformer(inputChannel = GatewayConstants.PRETRANSFORM_CHANNEL, outputChannel = GatewayConstants.RECEIVE_CHANNEL_NAME)
    public Pretransform pretransformMet() {
        return new Pretransform();
    }


    /**
     * 
     * @param connectionFactory
     * @return
     */
    @Bean
    @ServiceActivator(inputChannel = GatewayConstants.SEND_TO_VENDOR_CHANNEL_NAME)
    public TcpSendingMessageHandler messageHandlerClient(@Qualifier("clientCF")AbstractClientConnectionFactory connectionFactory) {
        TcpSendingMessageHandler sendingHandler = new TcpSendingMessageHandler();
        sendingHandler.setConnectionFactory(connectionFactory);
        sendingHandler.setClientMode(true);

        return sendingHandler;
    }

    /**
     * 
     * @return
     */
    @Bean(GatewayConstants.TCP_ERROR)
    public MessageChannel tcpErrrorChannel() {
        return new DirectChannel();
    }

    @Bean(GatewayConstants.PRETRANSFORM_CHANNEL)
    public MessageChannel preReceiveChannel() {
        return new DirectChannel();
    }

    @Bean(GatewayConstants.RECEIVE_CHANNEL_NAME)
    public MessageChannel receiveChannel() {
        return new DirectChannel();
    }

    @Bean(GatewayConstants.BATCH_SEND_CHANNEL_NAME)
    public MessageChannel sendchannel() {
        return new DirectChannel();
    }

    /**
     * 
     * @return
     */
    @Bean(GatewayConstants.SEND_TO_VENDOR_CHANNEL_NAME)
    public MessageChannel sendToVendorChannel() {
        return new DirectChannel();
    }

}

...