thrift java 对象_java – 如何确保thrift对象向后兼容?

我们目前正在使用节俭来开发我们的微服务.

当我最近遇到这个问题时.

下面假设是摘要对象的thrift合约,并且有一个API使用传递的摘要对象获取和更新摘要.

版本 – 1.0

struct Summary {

1: required string summaryId,

2: required i32 summaryCost

}

Summary getSummary(1: string summaryId);

void updateSummary(1: Summary summary);

现在让我们假设有5个服务使用这个1.0的Summary摘要.

在下一个版本中,我们添加另一个名为summaryvalues列表的Object.

所以新合同看起来像

版本 – 2.0

struct Summary {

1: required string summaryId,

2: required i32 summaryCost,

3: optional list summaryValues

}

Summary getSummary(1: string summaryId);

void updateSummary(1: Summary summary);

>因此,当填充下面的列表时,我们保存值列表summaryValues aganist summaryId.

>当客户端将此列表发送为null时,我们删除为该’summaryId`保存的现有值.

现在,当使用旧版本的thrift契约(版本1.0)的其他服务尝试调用getSummary和updateSummary时,会出现问题.

通过调用updateSummary来调用旧客户端的目的是为summaryCost设置另一个值.但是,由于此客户端不包含对象summaryValues,因此它将Summary对象的summaryValues作为null发送到Server.

这导致服务器删除该summaryId的summaryValues的所有现有值.

有没有办法在节俭中处理这个问题? isSet()方法在这里不起作用,因为它们尝试执行简单的空检查.

每次我们通过修改现有对象来发布更新的客户端时,即使更改与它们无关,我们也必须强制升级其他服务器的客户端版本.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值