Google Healthcare API:DICOM去标识后如何获取Pub/Sub通知?
问题描述
我正在开发一个Cloud Run服务,通过Node.js调用Google Healthcare API对DICOM存储库做去标识处理,步骤如下:
- 调用
healthcare.projects.locations.datasets.dicomStores.createAPI并传入notificationConfig参数,创建关联Pub/Sub主题InstanceDeidentifiedEvent的目标DICOM存储库 - 调用
healthcare.projects.locations.datasets.dicomStores.deidentifyAPI,将源DICOM存储库的实例去标识后存入目标存储库
但deidentify()调用成功后,完全没收到预期的Pub/Sub通知。查Google文档发现,Pub/Sub通知好像只有通过dicomStores.dicomWeb.studies.storeInstances请求写入实例时才会触发,想确认这种场景下能不能触发通知,以及对应的解决方案。
回答
可行性确认
你的观察完全正确:Google Healthcare API的DICOM存储库Pub/Sub通知默认仅对通过DICOMweb标准接口(如storeInstances)写入的实例触发,通过deidentify这类批量操作API写入的实例不会自动触发通知。这是因为批量操作的底层执行逻辑和标准DICOMweb写入请求不同,不会触发预设的通知钩子。
解决方案
有三种实用的处理方式:
手动触发通知
在deidentifyAPI调用成功后,通过代码主动查询目标DICOM存储库中新增的实例,然后调用Pub/Sub的publishAPI向指定主题发送自定义通知。可以利用deidentify返回的操作ID,通过operations.get接口查询操作详情,获取处理完成的实例列表,再批量生成通知内容。利用Cloud Functions监听操作事件
配置Cloud Functions监听Google Healthcare的操作完成事件(例如google.cloud.healthcare.v1.DicomStore.Deidentify类型的事件),当操作成功完成时,自动去目标存储库拉取实例信息并发送Pub/Sub通知。这种方式不需要在Cloud Run服务中额外添加逻辑,依赖GCP原生的事件驱动体系实现。改用DICOMweb接口分批写入
如果业务场景允许,可以将源DICOM实例分批取出,逐个通过dicomStores.dicomWeb.studies.storeInstances接口写入目标存储库(同时执行去标识处理),这种方式会自动触发你配置的Pub/Sub通知。但该方法性能不如批量deidentifyAPI,更适合数据量较小的场景。
内容的提问来源于stack exchange,提问作者GaryY

