将 HL7v2 消息导出到 Pub/Sub

本页面介绍了如何使用 projects.locations.datasets.hl7V2Stores.export 方法将 HL7v2 消息导出到 Pub/Sub。

您可以将 HL7v2 消息导出到 Pub/Sub 以进行下游处理。假设您有一条 Dataflow 流水线,可在将新消息提取到 HL7v2 存储区时转换 HL7v2 消息。流水线从 Pub/Sub 订阅中读取并等待新 HL7v2 消息的通知。当您使用 hl7V2Stores.import 方法将 HL7v2 消息导入 HL7v2 存储区时,该方法不会发送 Pub/Sub 通知。如需触发流水线,请导入 HL7v2 消息,然后使用 hl7v2Stores.export 方法将它们导出至 Pub/Sub。

须知事项

启用 Pub/Sub API

在 Google Cloud 控制台中,启用 Pub/Sub API:

启用 API

配置 Pub/Sub 权限

如需将消息从 HL7v2 存储区导出到 Pub/Sub,您必须将 pubsub.publisher 角色添加到项目的 Cloud Healthcare Service Agent 服务帐号中。 如需查看添加所需角色的步骤,请参阅 DICOM、FHIR 和 HL7v2 存储区 Pub/Sub 权限

创建 Pub/Sub 主题

如需创建主题,请参阅创建主题

各个数据存储区可以有自己的 Pub/Sub 主题,或者多个数据存储区可以共享同一主题。

指定 Pub/Sub 主题时,请使用以下格式:

projects/PROJECT_ID/topics/TOPIC_NAME

PROJECT_ID 是您的 Google Cloud 项目 ID,TOPIC_NAME 是 Pub/Sub 主题的名称。

将 HL7v2 消息导出到 Pub/Sub

默认情况下,系统会导出 HL7v2 存储区中的所有 HL7v2 消息。 如需导出 HL7v2 消息的子集,您可以使用过滤条件以仅导出与过滤条件匹配的消息。 如需了解详情,请参阅指定过滤条件

curl

如需将 HL7v2 消息导出到 Pub/Sub,请发出 POST 请求并指定以下信息:

  • 父数据集的名称
  • HL7v2 存储区的名称
  • 目标 Pub/Sub 主题

以下示例展示了使用 curlPOST 请求。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'pubsubDestination': {
        'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC'
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:export"

如果请求成功,服务器将以 JSON 格式返回响应:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get 方法

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.hl7v2.Hl7V2Service.ExportMessages",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "counter": {
      "success": "RESOURCE_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.hl7v2.ExportMessagesResponse"
  }
}

指定过滤条件

如需导出 HL7v2 消息的子集,您可以使用过滤条件仅导出与过滤条件匹配的消息。

有效的过滤条件参数包括:

  • message_type:来自 MSH.9.1 字段。例如 NOT message_type = "ADT"
  • send_date:消息从 MSH.7 细分中发送的 YYYY-MM-DD 日期,以数据集的时区指定。例如 send_date < "2017-01-02"
  • send_time:发送消息时的时间戳。此参数来自消息的 MSH.7 片段。此参数使用 RFC 3339 时间格式进行比较。例如 send_time < "2017-01-02T00:00:00-05:00"
  • create_time:在 Cloud Healthcare API 中创建消息的时间戳,使用 RFC 3339 时间格式进行比较。例如:create_time < "2017-01-02T00:00:00-05:00"
  • send_facility:消息的护理中心,来自 MSH.4 细分。例如 send_facility = "ABC"
  • startTime:时间范围的开始时间,以 send_time 参数的形式指定,在此期间会发送 HL7v2 消息。如需了解详情,请参阅 startTime
  • endTime:一个时间范围的结束时间,以 send_time 参数的形式指定,在此期间会发送 HL7v2 消息。如需了解详情,请参阅 endTime

您可以使用这些术语指定任何过滤条件。如需了解如何指定过滤器语法和构建查询,请参阅查询字符串

以下示例展示了如何指定与 ADT 类型的消息匹配的过滤器。

curl

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'pubsubDestination': {
        'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC'
      },
      'filter': 'message_type = \"ADT\"'
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:export"

查看 Pub/Sub 中导出的 HL7v2 消息

如需在 Pub/Sub 中查看导出的 HL7v2 消息,请运行 gcloud pubsub subscriptions pull 命令。该命令使用 --format=json 标志以 JSON 格式返回输出结果,而非默认的 YAML。

gcloud pubsub subscriptions pull --auto-ack projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION \
    --format=json
  • PROJECT_ID 是您的 Google Cloud 项目的 ID
  • PUBSUB_SUBSCRIPTION 是附加到导出 HL7v2 消息的 Pub/Sub 主题的订阅

输出如下所示:

[
  {
    "ackId": "ACK_ID",
    "message": {
      "attributes": {
        "msgType": "TYPE"
      },
      "data": "DATA",
      "messageId": "8076570784126536",
      "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ"
    }
  }
]