HL7中国发布订阅框架实施指南
2025.03.10 - release

HL7中国发布订阅框架实施指南 - Local Development build (v2025.03.10) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

测评

介绍

发布订阅框架是用于不同组件或服务之间异步通信的一种架构设计模式。消息的发送者不会将消息直接发送给特定的接收者,而是通过通知代理将消息广播出去,让订阅该消息主题的订阅者消费到。发布订阅模式允许在系统的不同组件之间传递消息,而这些组件之间无需知道彼此的身份(即它们是解耦的),使它更加灵活和可扩展。

基于主题的订阅使订阅者能够在事件发生时接收通知,是服务器驱动的工作流,并使客户端避免轮询数据更改。

目标

测试系统是否支持[[发布订阅框架实施指南]]声明的功能,包括:

  • 通知代理:
    • 应支持 SubscriptionTopic 资源的创建。
      • 可以支持 SubscriptionTopic 的读取、查询和删除`。
    • 应支持 Subscription 资源的创建、查询和取消操作。
    • 应支持在Rest-hook类型的通道上进行通知分发
    • 应支持 $status 操作
  • 发布者:
    • 应在 FHIR 服务器上创建 SubscriptionTopic 资源
    • 应支持通知的发布
  • 订阅者:
    • 应在 FHIR 服务器上创建、取消和查询Subscription实例
    • 应使用 $status 操作来检查/验证订阅的状态
  • 通知接收者:
    • 应在REST-Hook类型的通道上进行通知接收

参与者

  • 致力于实现 Subscription 的开发人员。
  • 希望测试 FHIR R5 并提供反馈的实现者。
  • 在订阅基础上构建实施指南上的作者。

先决条件

  • 对基于主题的订阅有基本的了解
  • 已通读发布订阅框架实施指南
  • 一个正常运行的开发环境,其代码实现下面列出的所有角色,参与所有测试场景。

负责人

yeyanbo

实施指南

发布订阅框架实施指南

系统角色

可以将发布订阅框架实施指南中规定的三种角色划分为三个系统角色:

订阅服务系统

  • 订阅者: 前端WebApp。用于创建和编辑Subscription的工具。
  • 通知代理: 后端服务。提供对资源SubscriptionSubscriptionStatusSubscriptionTopic的存储以及对资源的访问端点。

表单填报系统

  • 发布者:当表单填报完成,提交时触发表单填报完成的通知事件。

表单监管系统

  • 通知接收者: 通过Rest-Hook通道接收表单填报完成的就绪通知。

相关主题

本主题依赖FHIR Connectathon Track Form主题的系统角色充当通知的发布者和接收者。

只有报名参加FHIR Connectathon Track Form主题或者已经测评通过该主题的厂商才能报名当前主题。另外需要注意的是,需要重新根据FHIR Connectathon Track Form进行功能完善,以支持发布订阅框架实施指南的发布和通知要求。

场景

受国家疾病预防控制局委托,某主管部门开展本次调查,以了解我国新冠病毒感染情况。

场景1: 注册订阅主题

  • 操作:通知发布端将支持的 SubscriptionTopic注册到通知代理服务器上。
  • 前提条件:通知发布端必须能够生成所支持的SubscriptionTopic资源。
  • 技术实现建议
    • 在实现订阅代理服务角色的系统中,应实现SubscriptionTopic资源的增删改查等方法。
    • 在实现发布者角色的系统中,可以设计一个启用通知的系统配置项。
      • 当启用通知选项后,可以配置订阅代理服务的端点,以与订阅代理服务进行交互。
        • 如果发布者存在多个订阅主题,可以选择需要注册的订阅主题。
      • 当点击应用配置后:
        • 首先,查询订阅代理服务上是否存在要注册的订阅主题(通过url元素判定,而不是name元素)
        • 如果存在,则忽略;
        • 如果不存在,则将生成的SubscriptionTopic资源注册到订阅代理服务上。

场景2: 创建订阅

  • 操作:订阅客户端为服务器实现的 SubscriptionTopic 创建 Subscription
  • 前提条件:客户端和服务器必须支持商定的主题
  • 技术实现建议
    • 在实现订阅代理服务角色的系统中,应实现Subscription资源的增删改查等方法。
    • 在实现订阅者角色的系统中,应提供订阅管理的菜单项。
      • 应存在一个订阅列表页面,并能提供过滤查询功能;
      • 应在订阅列表页面提供一个添加订阅的按钮,以跳转到创建订阅的编辑页面;
      • 应在创建订阅页面提供如下功能:
        • 选择订阅主题
        • (可选)更加细化的过滤参数
        • 通知发送通道类型以及地址(本次测试要求至少支持RestHook和Websocket两种类型)
        • 通知内容形式
        • 心跳频率、超时设置、以及在单个通知消息中可以发送事件的最大数量

场景3: 表单填报完成事件发布

  • 操作发布者向配置项指定的订阅代理服务端点推送通知消息。
  • 前提条件:启用通知配置项激活,且某个表单填报完成
  • 技术实现建议
    • 在实现发布者角色的系统中,应实现:
      • 当表单填报完成后,根据是否启动通知配置项,向配置项中的服务端点推送通知消息。
      • 通知消息内容应能自动生成,且使用Rest-Hook通道进行推送。

场景4: Rest Hook通道通知

  • 操作:FHIR 服务器通过使用适当的通知包对订阅资源实例中标识的终端节点执行 HTTP/S POST 来通知通知接收者
  • 前提条件:对应的Subscription已经激活,且发布者已经推送了事件通知。
  • 成功标准:当 FHIR 服务器内满足订阅中的条件时,FHIR 服务器将执行 HTTP/S POST。
  • 技术实现建议
    • 在实现订阅代理服务角色的系统中,其订阅执行环境应实现:
      • 在接收到发布者推送的通知后,应能根据通知的主题以及更详细的过滤条件,将通知转发给通知接收者
      • 应能缓存发布者推送的事件通知,避免因系统崩溃导致的事件通知丢失。
      • 应能根据订阅的内容类型设置,进行通知内容的变换。
      • 应能根据通道类型,选择合适的通道进行通知的转发。

场景5: 订阅状态查看

  • 操作订阅端通知代理服务上获取指定SubscriptionSubscriptionStatus
  • 前提条件:订阅激活后,通知流转过一段时间
  • 技术实现建议
    • 在实现订阅代理服务角色的系统中,应实现:
      • 当一个Subscription被激活后,会在运行时的上下文中维护当前订阅的状态,该状态中的值通常维护在内存中。
      • 当系统发生停止或启动时,会进行订阅状态的持久化存储和读取。
    • 在实现订阅者角色的系统中的订阅管理页面中:
      • 点击某个订阅,应能查看该订阅的执行状态。包括:
        • 自订阅创建后,事件通知的数量
        • 订阅主题
        • 如果订阅状态为error时,应提供详细的错误信息

测试流程

本主题测评按如下步骤进行:

  1. 注册订阅主题
  2. 创建订阅
  3. 表单填报完成事件发布
  4. 向表单监管系统推送通知
  5. 查看订阅的运行状态

步骤1:注册订阅主题

工作人员以管理员系统角色进入表单填报系统的前端管理界面,跳转到系统配置管理页面,勾选启用通知的系统配置项,并填写通知代理服务端点地址。

触发条件

点击应用保存按钮时触发。

验证标准

  • 订阅代理服务应提供SubscriptionTopic资源的Create和Search操作,满足发布者的调用需求。
  • 发布者应提供启用通知的系统配置项,且允许输入订阅代理服务的端点地址。
  • 发布者应首先调用订阅代理服务SubscriptionTopic资源的Search操作,根据url参数查看该主题是否已注册。
  • 当订阅主题未注册,发布者应调用订阅代理服务SubscriptionTopic资源的Create操作,注册订阅主题。
  • 注册完成后,通知代理服务上存在该主题且应处于激活状态。应包括 R5 约定的所有必要字段。
  • 应提供查看订阅代理服务发布者交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

步骤2:创建订阅

工作人员以管理员系统角色进行订阅服务系统的前端管理界面,跳转到订阅管理页面,在订阅列表页面上点击新增订阅按钮,跳转到订阅创建页面。

在填写内容时:

  1. 选择订阅主题为表单填报就绪
  2. 选择通知传输的通道类型为Rest-Hook,并填写通知的端点地址;(本次测评仅测试该形式)
  3. 选择内容为id-only;
  4. 选择在一条通知消息中可以容纳多少事件(测评中为了效率可以设置为2或者3)。

完成之后(系统检测所有必选项是否填充),点击保存按钮,完成订阅的创建过程。

触发条件

点击保存按钮触发。生成Subscription资源,调用Create操作。

验证标准
  • 订阅代理服务应提供Subscription资源的CreateUpdateDeleteReadSearch等操作,满足订阅者的调用需求。
  • 订阅者应调用订阅代理服务Subscription资源的Create操作,创建订阅。
  • 订阅者应调用订阅代理服务Subscription资源的UpdateDeleteReadSearch操作,管理订阅。
  • 在创建订阅时,界面上应提供心跳间隔时间和超时时间等配置项,并提供合理的默认值。
  • 订阅代理服务上订阅存在且处于活动状态。它包括 R5 中的所有必要字段。
  • 应提供查看订阅代理服务订阅者交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

步骤3:表单填报完成事件发布

工作人员以填报者角色进入表单填报系统的前端界面,进行新冠病毒感染情况的调查报告填写。

完成之后(系统检测所有必选项是否填充),点击保存按钮,完成调查报告的存储。

触发条件

表单填报系统存储‘QuestionnaireResponse’资源后触发。

验证标准
  • 订阅代理服务应提供发布者的通知接收服务,满足发布者的调用需求。
  • 发布者应调用订阅代理服务的通知接收服务,推送通知消息。
  • 订阅代理服务接收到发布者推送的通知消息。
  • 应提供查看订阅代理服务发布者交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

步骤4:向表单监管系统推送通知

工作人员以监管者角色进入表单监管系统的前端界面,可以查看疫苗接种的统计信息。以饼图显示,可以显示每种情况的占比、人数、以及总数。

触发条件

订阅服务系统接收到表单填报系统发布的通知消息后触发。

验证标准
  • 通知接收者应提供基于Rest的通知接收端点,满足订阅服务系统的调用需求。
  • 订阅服务系统应调用通知接收者的通知接收端点,转发通知消息。
  • 通知接收者接收到订阅服务系统推送的通知消息。
  • 应提供查看订阅代理服务通知接收者交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

步骤5:查看订阅的运行状态

工作人员以管理员系统角色进入订阅服务系统的前端管理界面,跳转到订阅管理页面,在订阅列表中选择本次测评创建的订阅,查看该订阅的运行状态。

触发条件

点击订阅列表中指定订阅,跳转到订阅状态展示页面时触发。

验证标准
  • 订阅代理服务应提供Subscription资源的$status操作,满足订阅者的调用需求。
  • 订阅者应提供订阅状态展示页面,且应在订阅列表中点击某订阅项后跳转到该页面。
  • 订阅者应调用订阅代理服务Subscription资源的$status操作,来获取当前订阅的运行状态。
  • 应提供查看订阅代理服务订阅者交互的调试能力,可以直接查看服务互操作时HTTP的调用过程。例如:浏览器提供的「开发者工具」。

安全和隐私注意事项

在测评环境中没有对OAuthTLS的要求(尽管在生产环境中需要此类技术)。