Я новичок в весенних интеграционных 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();
}
}