我们需要监听端口并接收消息,然后需要将其写回到同一个输出流中。我们已经编写了运行良好的自定义解串器。但自定义序列化器没有被调用。我们已经使用了 Spring 集成流程。
@Bean
public IntegrationFlow integrationFlow() {
return IntegrationFlows.from(Tcp.inboundGateway(Tcp.nioServer(port)
.deserializer(new TestDeserializer())
.serializer(new TestSerializer())
))
.transform(Transformers.objectToString())
.handle("outboundService", "processAndSendMessage")
.get();
}
找到下面的自定义解串器:
public class TestDeserializer implements Deserializer<String>{
private static final char END_OF_BLOCK = '\u001c';
@Override
public String deserialize(InputStream inputStream) throws IOException {
boolean end_of_message = false;
int characterReceived = 0;
StringBuffer parsedMessage = new StringBuffer();
characterReceived = inputStream.read();
while (!end_of_message) {
characterReceived = inputStream.read();
if (characterReceived == END_OF_BLOCK) {
characterReceived = inputStream.read();
end_of_message = true;
}else {
parsedMessage.append((char) characterReceived);
}
}
String message = parsedMessage.toString();
inputStream.close();
parsedMessage = null;
return message;
}
}
找到下面的自定义序列化器
public class TestSerializer implements Serializer<String>{
@Override
public void serialize(String object, OutputStream outputStream) throws IOException {
System.out.println("inside Serializer -- "+object);
outputStream.write(object.getBytes());
System.out.println("inside after Serializer -- "+object);
}
}
在 Spring 集成流程中未调用自定义序列化器。
当下游流返回回复时,从
Serializer
调用 Tcp.inboundGateway()
。
请确保您的
.handle("outboundService", "processAndSendMessage")
返回一些内容。否则就没有意义了Tcp.inboundGateway()
。