【发布时间】:2018-03-01 09:49:34
【问题描述】:
现状
- 在 linux 服务器上,几个 jar 使用套接字运行 - 侦听和响应字符串消息
- 在 wildfly 应用服务器中运行的新战争正在将请求委托给这些套接字
- WAR 使用的是 spring,尤其是 spring 与注释的集成
我有一个配置类持有服务@Configuration / @EnableIntegration /@IntegrationComponentScan
我已经创建了一个消息传递网关
@MessagingGateway(defaultRequestChannel = "testGateway")
public interface TestGateway{
public Future<String> sendMessage(String in);
}
应用程序应该作为客户端发送和接收请求。我创建了一个空事件处理程序,因为应用程序应该只发送字符串并等待答案
@Bean
public MessageChannel testChannel() {
return new DirectChannel();
}
@Bean
@ServiceActivator(inputChannel = "testGateway")
public MessageHandler testGate() {
final TcpOutboundGateway gate = new TcpOutboundGateway();
gate.setConnectionFactory(connectionFactory());
gate.setReplyChannel(docServerChannel());
return gate;
}
@Bean
public AbstractClientConnectionFactory connectionFactory() {
final AbstractClientConnectionFactory connectionFactory = new TcpNetClientConnectionFactory("localhost", 5959);
connectionFactory.setSoTimeout(300000);
connectionFactory.setApplicationEventPublisher(new NullEventPublisher());
connectionFactory.setSerializer(new DefaultSerializer());
connectionFactory.setDeserializer(new DefaultDeserializer());
return connectionFactory;
}
消息在接收数据时应转换为字符串,在发送时应转换为字节
@MessageEndpoint
public static class TestMessage {
@Transformer(inputChannel = "testChannel")
public String convert(final byte[] bytes) {
return new String(bytes);
}
@Transformer(inputChannel = "testGateway")
public String convertResult(final byte[] bytes) {
return new String(bytes);
}
}
应用程序已部署,但响应总是超时。套接字正在运行。我只想要一个简单的直接双向连接:WAR JAR.
有人可以帮助或给我一个提示吗?
-----UPDATE-1----------
套接字正在接收消息,但由于发送消息后套接字已关闭,因此无法读取响应。
-----UPDATE-2----------
- 这是一个错字。系统返回一个MessageHandler
- 我已将工厂添加为 Spring 管理的 bean
- 我已将“\r\n”添加到旧代码中
- 应用程序仍在抱怨“等待响应超时”
旧版服务器正在打开服务器套接字并向套接字发送消息
final OutputStream os = serverSocket.getOutputStream();
final PrintWriter pw = new PrintWriter(os, true);
final BufferedReader br = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
final String incoming = br.readLine();
final String response= "ok\r\n";
pw.println(response);
pw.flush();
Thread.sleep(5000);
pw.close();
serverSocket.close();
-----UPDATE-3----------
Spring 的 TcpOutboundGateway 没有响应
connection.send(requestMessage);
Message<?> replyMessage = reply.getReply();
if (replyMessage == null) {
【问题讨论】:
标签: java spring tcp spring-integration