Closed Developer-echo closed 1 year ago
第一次调用和第二次调用参数及返回值一样么?
我的流程
修改 hhcx.open.json 公共配置文件的参数
原始参数
{ "key1":"val1", "key2":"val2", "key3":"val3" }
第一次修改并发布配置(均使用openapi)
修改接口入参
{ "DataChangeLastModifiedBy": "hhcx", "Value": "{\"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3-edit\"}", "Comment": "旧项目-Settings配置项", "DataChangeCreatedBy": "hhcx", "Key": "content", "Name": "hhcx.open.json", "Env": "DEV", "AppId": "hhcx-pub", "ClusterName": "default" }
发布配置入参
{ "ReleaseTitle": "生产项目配置变动", "ReleaseComment": "来源:生产项目", "ReleasedBy": "hhcx", "Name": "hhcx.open.json", "Env": "DEV", "AppId": "hhcx-pub", "ClusterName": "default" }
result
{ "Id": 160, "AppId": "hhcx-pub", "ClusterName": "default", "NamespaceName": "hhcx.open.json", "Name": "生产项目配置变动", "Configurations": { "content": "{\n \"key1\":\"val1\",\n \"key2\":\"val2\",\n \"key3\":\"val3\"\n}" }, "Comment": "来源:生产项目", "DataChangeCreatedBy": "hhcx", "DataChangeLastModifiedBy": "hhcx", "DataChangeCreatedTime": "2023-07-04T18:48:11.028+08:00", "DataChangeLastModifiedTime": "2023-07-04T18:48:11.028+08:00" }
注意:这里发布配置后返回的content内容并非我修改的配置,我不清楚为什么。
第二次修改并发布配置(均使用openapi)
修改接口入参
{ "DataChangeLastModifiedBy": "hhcx", "Value": "{\"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3\",\"key4\":\"val4-add\"}", "Comment": "旧项目-Settings配置项", "DataChangeCreatedBy": "hhcx", "Key": "content", "Name": "hhcx.open.json", "Env": "DEV", "AppId": "hhcx-pub", "ClusterName": "default" }
发布配置入参
{ "ReleaseTitle": "生产项目配置变动", "ReleaseComment": "来源:生产项目", "ReleasedBy": "hhcx", "Name": "hhcx.open.json", "Env": "DEV", "AppId": "hhcx-pub", "ClusterName": "default" }
result
{ "Id": 161, "AppId": "hhcx-pub", "ClusterName": "default", "NamespaceName": "hhcx.open.json", "Name": "生产项目配置变动", "Configurations": { "content": "{\"key1\":\"val1\",\"key2\":\"val2\",\"key3\":\"val3\",\"key4\":\"val4-add\"}" }, "Comment": "来源:生产项目", "DataChangeCreatedBy": "hhcx", "DataChangeLastModifiedBy": "hhcx", "DataChangeCreatedTime": "2023-07-04T18:49:25.905+08:00", "DataChangeLastModifiedTime": "2023-07-04T18:49:25.905+08:00" }
整个流程下来,这次在第一次发布配置后,后端的【有修改tag】没有展示,不过依然存在【空白的发布日志】。 第二次与正常预期符合。
提醒:为什么没有触发webhook通知,是openapi的方式不支持吗?
第一个问题用到的C# api好像不是Com.Ctrip.Framework.Apollo.OpenApi提供的api。createIfNotExists是否设置为true?
第二个问题我问一下服务端开发者
谢谢。
展示的入参对象是基于sdk提供的方法进行的二次封装的方法入参。 我的源代码
// 👇 封装
/// <summary>
/// 更新 namespaces item配置项
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static void NamespacesItemUpdatestatic(NamespacesItemUpdateInput input)
{
try
{
new OpenApiFactory(new OpenApiOptions()
{
PortalUrl = portalUrl,
Token = token,
Timeout = timeOut,
})
.CreateNamespaceClient(appId: input.AppId
, env: input.Env
, cluster: input.ClusterName
, @namespace: input.Name)
.UpdateItem(item: new Item()
{
Key = input.Key,
Value = input.Value,
Comment = input.Comment,
DataChangeLastModifiedBy = input.DataChangeLastModifiedBy
});
}
catch (Exception ex)
{
Logger.Warn("apollo", ex.Message);
}
}
// 👇 使用
ApolloOpenApi.NamespacesItemUpdatestatic(input: new NamespacesItemUpdateInput()
{
AppId = "hhcx-pub",
ClusterName = "default",
Name = namespaceName,
Comment = "旧项目-Settings配置项",
DataChangeCreatedBy = "hhcx",
DataChangeLastModifiedBy = "hhcx",
Env = "DEV",
Key = "content",
Value = content
});
对于第一个问题,我的猜测:修改配置的事件在服务端还没有执行完成,便调用了发布事件。即 A - B - C 变成了 A - B/C - B(完成)。我将添加线程休眠来验证下这个猜测。
对于第二个问题,若服务端对OpenApi的配置发布没有进行webhook通知,我将只能进行监听来完成通知动作吗?
Update接口只能修改,CreateOrUpdateItem接口才是创建或者修改。
apollo包已经支持更新客户端通知的功能啊,不需要单独的webhook。
这个issue是基于“修改配置”引发的问题而提出的,按照预期情况使用 Update 应该是可以满足业务流程的。 不过还是感谢你的提醒,我会用 CreateOrUpdateItem 验证下流程是否满足业务。
另外我没有看到“更新客户端”的功能文档,方便贴出吗?
好的,我先关闭了这个问题,再次感谢。
hi!
现在根据客户端设计,我已经完成了我的需求。感谢 Apollo .net 开发者支持。
我的客户端平台:.NET7
使用了 选项模式 IOptionsMonitor
一个小建议 1、add/update/remove/addorupdate 配置更新增加 isRelease 入参项。
在反复的实验,可以确定的是:在极短的时间内调用 配置变动 方法和 发布命名空间流程,后者发布的最新配置内容并非是本次配置变动的内容(可以通过增加休眠或者分步操作来解决)。
最后 希望我的经验能带来帮助 :)
开发者你好。 我在使用openapi进行配置发布时,遇到了两个问题。
参考文档:3.2.13配置发布
我的平台:.NET 4.6 使用的SDK版本:Com.Ctrip.Framework.Apollo.OpenApi v2.10.0.0
以下是第一次调用与第二次管理端变化的截图
第一次
第二次
期待回复!