java – Spring Integration TCP
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring Integration TCP,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2758字,纯文字阅读大概需要4分钟。
内容图文
我想设置Spring TCP Server-Client应用程序.我需要一个服务器监听端口上的传入消息,例如,6666,以及客户端在不同的端口上发送消息,例如7777.我已经关注了documentation,但我遇到了客户期望的问题收到回复,但事实上,另一端只会收到来自客户的消息,不会发送任何回复.所以,基本上,我经常遇到这个错误:
o.s.i.ip.tcp.TcpOutboundGateway : Tcp Gateway exception
org.springframework.integration.MessageTimeoutException: Timed out waiting for response
我找到了类似问题的this答案,所以我试着在我的代码中整合答案.这是我的Config类:
@EnableIntegration
@IntegrationComponentScan
@Configuration
public class Config {
private int port = 6666;
@MessagingGateway(defaultRequestChannel = "toTcp")
public interface Gateway {
String viaTcp(String in);
}
@Bean
@ServiceActivator(inputChannel = "toTcp")
public TcpOutboundGateway tcpOutGate(AbstractClientConnectionFactory connectionFactory) {
TcpOutboundGateway gate = new TcpOutboundGateway();
gate.setConnectionFactory(connectionFactory);
gate.setOutputChannelName("resultToString");
gate.setRequiresReply(false);
return gate;
}
@Bean
public TcpInboundGateway tcpInGate(AbstractServerConnectionFactory connectionFactory) {
TcpInboundGateway inGate = new TcpInboundGateway();
inGate.setConnectionFactory(connectionFactory);
inGate.setRequestChannel(fromTcp());
return inGate;
}
@Bean
public ByteArrayRawSerializer serializer() {
return new ByteArrayRawSerializer();
}
@Bean
public MessageChannel fromTcp() {
return new DirectChannel();
}
@MessageEndpoint
public static class Echo {
@Transformer(inputChannel = "fromTcp", outputChannel = "toEcho")
public String convert(byte[] bytes) {
return new String(bytes);
}
@ServiceActivator(inputChannel = "toEcho")
public String upCase(String in) {
System.out.println("Server received: " + in);
return in.toUpperCase();
}
@Transformer(inputChannel = "resultToString")
public String convertResult(byte[] bytes) {
return new String(bytes);
}
}
@Bean
public AbstractClientConnectionFactory clientCF() {
TcpNetClientConnectionFactory tcpNet = new TcpNetClientConnectionFactory("localhost", 7777);
tcpNet.setDeserializer(serializer());
tcpNet.setSerializer(serializer());
tcpNet.setSingleUse(true);
tcpNet.setTaskExecutor(new NullExecutor());
return tcpNet;
}
@Bean
public AbstractServerConnectionFactory serverCF() {
TcpNetServerConnectionFactory tcp = new TcpNetServerConnectionFactory(this.port);
tcp.setSerializer(serializer());
tcp.setDeserializer(serializer());
return tcp;
}
public class NullExecutor implements Executor {
public void execute(Runnable command) {}
}
}
这是我使用客户端发送消息的方式:
@Autowired
private Gateway gateway;
gateway.viaTcp("Some message");
如何设置客户端以使其不等待响应?
解决方法:
网关用于请求/回复交互,通道适配器用于单向交互.
使用TcpSendingMessageHandler和TcpReceivingChannelAdapter而不是入站和出站网关.
内容总结
以上是互联网集市为您收集整理的java – Spring Integration TCP全部内容,希望文章能够帮你解决java – Spring Integration TCP所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。