コールダボインターフェイスとシリアル化オブジェクトへの復帰ではなく、私はそれをしたい結果、なぜ&どのように行うには?

ケースストーリー:

(以下、「ビジネス」としてサービスを「プラットフォーム」としてダボサービスプロバイダ、ダボ発信者と呼びます)

問題を見つけます。

1、現象は:このインタフェースのこの種com.x.api.service.UserApiServiceのプラットフォームを呼び出し、結果のリストは、結果セット、問題がある場合に文字列にfastjsonのalibabaの配列と結果セットです。

 2、問題の原因:

時間の割り当てがある古い港、への変更は、リストを参照繰り返した前のオブジェクトを起こし、新しいオブジェクト新しいものではないプラットフォーム開発。

ダボ単一のデータだけでデータの正確性をテストするためのプラットフォームをチェックし、重複参照するかどうかを懸念していない、返され、問題がない確認するためにインターフェイスから返されました。

「状況は我々が期待した結果ではないかもしれない結果のシーケンスの存在への参照を繰り返した場合、fastjsonシリアライズオブジェクトを。」事業開発・コール・インターフェースは、FastJsonのシリアル化後に使用されます

3、解決策:

プラットフォームの開発 - リファレンスの重複を避けます。

事業開発 - クローズド循環参照検出パラメータ、JSON.toJSONString(RES、SerializerFeature.DisableCircularReferenceDetect)。

プラットフォームテスト - テストコードの動作シーケンスのビジネス側のシミュレーションは、このような問題を事前に求めることができます。

分析:

高度にスケーラブルな分散サービスフレームワークとしてダボ、シリアライゼーションの多様を提供するために、RPC特性を実現(Hessian2、ダボ、JSON(FASTJSONが kryo FST実装)、JAVA、SOAP、など)拡張を達成しますビジネス開発者は、実際のシーンに合わせて選択するため。(さまざまな方法を達成するためのシーケンス- RPCの章のシーケンスの深い理解-要約記事

Q1:直列化を使用したときに、サービス消費者が発生する可能性があるピットダボ?(教訓は、様々なビジネス関係者に共有することができます)

回答:

●“重复引用,序列化的结果往往不是我们预期的”,可以通过关闭循环引用检测参数的方法从业务端解决。(案例中的问题点即是该问题)。FastJson 反序列化注意事项 中还提到了其他可能的问题。

●如果用的是Hessian2序列化方式,可能会遇到的问题有浮点数反序列化问题子类覆盖父类字段hession反序列化获取不到

●ArrayList的子类在进行序列化时丢失属性的问题,可以通过对序列化类CollectionSerializer进行修改,同步修改相应的反序列化类解决问题

●Dubbo Hessian序列化参数为NULL问题,dubbo在采用hessian序列化时,一定要注意子类和父类不能有同名字段

●在使用dubbo时,HashMap不能作为Serializable的实例

小结:使用方在使用某种序列化方式时,应该了解该方式的特性,并考虑相关问题。比如,循环引用会不会出现问题 等等等等…. 

Q2:dubbo服务提供方在接口兼容性升级的时候有什么可以改进的地方?

答:

微服务接口兼容性升级之序列化

RPC接口设计中的考虑

Q3:平台测试能做些什么?

答:

序列化性能分析与测试dubbo典型协议、序列化方式组合性能对比测试——“在做性能分析和测试的时候我们并不单独处理每种序列化方式,而是把它们放到dubbo RPC中加以对比,因为这样更有现实意义。”

了解现在各个业务方的序列化方式,评估在测试代码中模拟哪种序列化操作(RPC为了追求可扩展性、性能等诸多因素,会支持多种序列化方式,测试时需要覆盖适当常用的序列化方式)

在测试代码中模拟业务的序列化操作(举例如下)

/***序列方式一:用 alibaba 的 fastjson **/

//在pom中添加依赖

<dependency>

    com.alibaba</groupId>

    <artifactId>fastjson</artifactId>

    <version>1.2.31</version>

</dependency>

//
import com.alibaba.fastjson.JSON;

// List 转 json string

String jsonStr = JSON.toJSONString( list );

// Map 转 json string

String jsonStr = JSON.toJSONString( map );

 

发布了11 篇原创文章 · 获赞 7 · 访问量 1万+

おすすめ

転載: blog.csdn.net/sinat_16683257/article/details/82911517