序列化netty的FullHttpRequest

时间:2015-01-13 08:54:29

标签: netty

我的Java项目中运行了一个netty服务器,正在监听请求。 Netty在将请求提供给处理程序之前将内部转换为FullHttpRequest类型。现在在我的处理程序中,我正在尝试序列化FullHttpRequest,因为我必须将其推送到RabbtitMQ。但看起来它不是可序列化的:

due java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:566)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:174)
    at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)
    ... 31 more
Caused by: org.apache.commons.lang3.SerializationException: java.io.NotSerializableException: io.netty.handler.codec.http.DefaultFullHttpRequest
    at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:139)
    at org.apache.commons.lang3.SerializationUtils.serialize(SerializationUtils.java:161)
    at com.company.myproject.util.RequestToByteArrayConverter.convertTo(RequestToByteArrayConverter.java:28)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:276)
    at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:165)
    ... 32 more

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。

  • 扩展FullHttpRequest / Response以实现Serializable。这很麻烦,因为你最终可能会为很多课程编写读/写解决方案。
  • 创建自己的FullHttpRequest / Response影子类,它从阴影类中复制有意义的位并可序列化。然后编写自己的适配器

我个人采用了影子方式。