【发布时间】:2018-04-29 05:59:47
【问题描述】:
我的通道管道包含几个解码器,它们都在 TextWebSocketFrame 消息上运行。现在我的问题是,我必须根据消息的某些内容选择正确的解码器。
基本上,我必须解析消息中的某个字段,然后决定是继续处理消息还是将消息传递给下一个编码器/处理程序。
大多数人建议在这种情况下使用单个解码器来解码所有消息,但我的问题是某些解码器是动态添加的,将所有逻辑放在单个解码器中会很混乱。
目前代码如下:
@Override
protected void decode(ChannelHandlerContext ctx, TextWebSocketFrame msg, List<Object> out) throws Exception {
String messageAsJson = msg.text();
JsonObject jsonObject = JSON_PARSER.fromJson(messageAsJson, JsonObject.class);
JsonObject messageHeader = jsonObject.getAsJsonObject(MESSAGE_HEADER_FIELD);
String serviceAsString = messageHeader.get(MESSAGE_SERVICE_FIELD).getAsString();
String inboundTypeAsString = messageHeader.get(MESSAGE_TYPE_FIELD).getAsString();
Service service = JSON_PARSER.fromJson(serviceAsString, Service.class);
InboundType inboundType = JSON_PARSER.fromJson(inboundTypeAsString, InboundType.class);
if (service == Service.STREAMING) {
out.add(decodeQuotesMessage(inboundType, messageAsJson));
} else {
}
}
所以基本上我需要 else 分支中的一些逻辑来将消息传递给管道中的下一个处理程序。
我知道,这种方法不是最有效的方法,但我的服务架构具有慢速路径(在不同的线程池上运行),包括此逻辑和快速路径。因此我可以在这个地方接受一些慢代码。
【问题讨论】: