TCP动态客户端



我需要向两个tcp外部服务器发送请求,我需要使用路由器还是需要有一个单独的AbstractClientConnectionFactory,tcpOutBound?

更新的代码-Gary,根据建议,我正在使用两个连接工厂,我将与两个TCP服务器通信,这是正确的方式吗?我不能只为两个通道使用一个AbstractClientConnectionFactory吗?

@Bean(name = "visaConnectionFactory")
public AbstractClientConnectionFactory clientConnectionFactoryVisa() {
ISOConnectionProperties visa = applicationProperties.getIsoServers().getVisa();
TcpNioClientConnectionFactory tcpNioClientConnectionFactory =
new TcpNioClientConnectionFactory(visa.getHost(), visa.getPort());
tcpNioClientConnectionFactory.setUsingDirectBuffers(true);
tcpNioClientConnectionFactory.setApplicationEventPublisher(applicationEventPublisher);
return new CachingClientConnectionFactory(tcpNioClientConnectionFactory, visa.getPoolSize());
}
@Bean(name = "mastercardConnectionFactory")
public AbstractClientConnectionFactory clientConnectionFactoryMastercard() {
ISOConnectionProperties mastercard = applicationProperties.getIsoServers().getMastercard();
TcpNioClientConnectionFactory tcpNioClientConnectionFactory =
new TcpNioClientConnectionFactory(mastercard.getHost(), mastercard.getPort());
tcpNioClientConnectionFactory.setUsingDirectBuffers(true);
tcpNioClientConnectionFactory.setApplicationEventPublisher(applicationEventPublisher);
return new CachingClientConnectionFactory(tcpNioClientConnectionFactory, mastercard.getPoolSize());
}
@Bean
public MessageChannel outboundChannel() {
return new DirectChannel();
}

@Bean
@ServiceActivator(inputChannel = "router.channel")
public HeaderValueRouter consumeRouterMessage() {
HeaderValueRouter router = new HeaderValueRouter("cardType");
router.setChannelMapping("V", "outboundChannelVisa");
router.setChannelMapping("M", "outboundChannelMastercard");
return router;
}
@Bean
@ServiceActivator(inputChannel = "outboundChannelVisa")
public MessageHandler outboundGatewayVisa(
@Qualifier("visaConnectionFactory") AbstractClientConnectionFactory clientConnectionFactory) {
TcpOutboundGateway tcpOutboundGateway = new TcpOutboundGateway();
tcpOutboundGateway.setConnectionFactory(clientConnectionFactory);
tcpOutboundGateway.setRequestTimeout(5_000);
return tcpOutboundGateway;
}
@Bean
@ServiceActivator(inputChannel = "outboundChannelMastercard")
public MessageHandler outboundGatewayMc(
@Qualifier("mastercardConnectionFactory") AbstractClientConnectionFactory clientConnectionFactory) {
TcpOutboundGateway tcpOutboundGateway = new TcpOutboundGateway();
tcpOutboundGateway.setConnectionFactory(clientConnectionFactory);
tcpOutboundGateway.setRequestTimeout(5_000);
tcpOutboundGateway.setUnsolicitedMessageChannelName("unsolicited");
return tcpOutboundGateway;
}
@ServiceActivator(inputChannel = "unsolicited")
public void handleUnsolicited(String in) {
log.debug("Unsolicited response:{}", in);
}

您需要一个单独的工厂和适配器;另请参阅此样本

https://github.com/spring-projects/spring-integration-samples/tree/main/advanced/dynamic-tcp-client

演示了一种按需动态添加TCP客户端的技术,其中包括缓存和LRU删除。

最新更新