更新Google Pub/Sub订阅重试策略时遇内部错误[code=e8c0]求助
解决Google Pub/Sub订阅重试策略更新时的e8c0内部错误
问题原因
你当前的操作存在错误:当订阅原本未配置重试策略时,直接通过字段掩码更新retry_policy.minimum_backoff和retry_policy.maximum_backoff这两个子字段会触发服务端内部错误。因为此时订阅的retry_policy字段本身不存在,服务端无法对不存在字段的子属性进行更新操作。
修正方案
将UpdateMask的Paths改为直接指向"retry_policy",因为你需要创建整个重试策略对象,而非更新已有对象的子字段。
修正后的代码:
sub, err := client.GetSubscription( context.Background(), &pubsubpb.GetSubscriptionRequest{ Subscription: subscriptionName, }) // 省略错误检查 sub.RetryPolicy = &pubsubpb.RetryPolicy{ MinimumBackoff: durationpb.New(c.config.MinimumBackoff), MaximumBackoff: durationpb.New(c.config.MaximumBackoff), } req := pubsubpb.UpdateSubscriptionRequest{ Subscription: sub, UpdateMask: &fieldmaskpb.FieldMask{ Paths: []string{"retry_policy"}, // 修改为整个字段路径 }, } _, err := client.UpdateSubscription(context.Background(), &req)
额外说明
如果后续需要更新已存在的重试策略的子字段(比如只修改最小退避时间),此时使用retry_policy.minimum_backoff这种子字段路径才是正确的,但前提是订阅已经配置过重试策略。
内容的提问来源于stack exchange,提问作者jmmurillo
相关产品推荐
相关产品推荐

