Compartilhar via

使用 AMQP 协议Azure Web PubSub事件侦听器的 CloudEvents 扩展

Azure Web PubSub服务将客户端事件描述为 CloudEvents。 CloudEvents 是描述常见格式的事件数据的规范,用于跨服务、平台和系统提供互操作性。

服务的事件侦听器侦听客户端事件。 事件中心当前是唯一受支持的事件侦听器终结点,其主要协议是 AMQP(高级消息队列协议)。 Web PubSub 服务使用 CloudEvents AMQP 协议绑定 将 CloudEvents 映射到 AMQP 消息。

从服务发送到服务器的数据始终采用 CloudEvents binary 格式。

Web PubSub CloudEvents 属性扩展

此扩展定义 Web PubSub 为其生成的每个事件使用的属性。

下表包含映射到 AMQP 消息 的标准属性 部分的属性。

名称 说明 示例
content-type 消息正文的 RFC-2046 MIME 类型 application/json
message-id 唯一地在 Web PubSub 服务中定义消息,格式为“{connection-id}/{service}生成的整数” 0bd83792-2a0c-48d3-9fbd-df63aa2ed9db/1

下表包含所有映射到 AMQP 消息 的应用程序属性 部分的 CloudEvents 属性。 每个属性名称的 cloudEvents:前缀为 .

名称 说明 示例
specversion 云事件规范版本,始终为 1.0 1.0
source 指示事件来自的中心和连接 ID,格式为“/hubs/{hub}/client/{connectionId}” /hubs/chat/client/0bd83792-2a0c-48d3-9fbd-df63aa2ed9db
id 服务生成的整数,同一客户端连接的事件中唯一 1
awpsversion 云事件Azure Web PubSub规范版本,始终为 1.0 1.0
hub 事件来自的中心名称 聊天
eventname 事件的名称 已连接
type 事件类型 azure.webpubsub.sys.connect
connectionid 客户端连接的 ID 0bd83792-2a0c-48d3-9fbd-df63aa2ed9db
time 服务发送事件的时间,格式为“yyyy-MM-ddTHH:mm:ssZ” 2021-01-01T00:00:00Z
userid* 用户的 ID user1
subprotocol* 子协议名称 json.webpubsub.azure.v1
connectionstate* 定义连接的状态。 可以在事件处理程序的响应标头中重置值。 有关连接状态的详细信息,请参阅 Web PubSub CloudEvents 属性 anystring

属性名称后面的“*”指示仅当值不为 null 或为空时,该属性才存在。

事件

本部分显示 AMQP 消息正文,其中包含依赖于特定客户端事件类型的属性值。 省略不依赖于客户端事件类型的属性值。

系统 connected 事件

  • content-type: application/json
  • cloudEvents:type: azure.webpubsub.sys.connected
  • cloudEvents:eventname: connected

消息正文始终为空 JSON。

{}

系统 disconnected 事件

  • content-type: application/json
  • cloudEvents:type: azure.webpubsub.sys.disconnected
  • cloudEvents:eventname: disconnected

消息正文包含客户端断开连接的原因。

{"reason":"{Reason}"}

简单 WebSocket 客户端的用户事件message

  • content-typeapplication/octet-stream 用于二进制框架; text/plain 对于文本框架;
  • cloudEvents:type: azure.webpubsub.user.message

消息正文是客户端发送的内容。

PubSub WebSocket 客户端的用户自定义事件{custom_event}

  • content-typeapplication/octet-stream用于二进制帧;application/json对于 JSON 框架;text/plain对于文本框架;对于 Protobuf 框架; application/x-protobuf
  • cloudEvents:type: azure.webpubsub.user.<event_name>

以下情况演示如何发送具有不同数据类型的事件和收到的 AMQP 消息正文。

案例 1:发送包含文本数据的事件:

{
    "type": "event",
    "event": "<event_name>",
    "dataType": "text",
    "data": "text data"
}

收到的 AMQP 消息正文:

text data

案例 2:发送包含 JSON 数据的事件:

{
    "type": "event",
    "event": "<event_name>",
    "dataType": "json",
    "data": {
        "hello": "world"
     }
}

收到的 AMQP 消息正文:

{
    "hello": "world"
}

案例 3:发送包含二进制数据的事件:

{
    "type": "event",
    "event": "<event_name>",
    "dataType": "binary",
    "data": "aGVsbG8gd29ybGQ=" // base64 encoded binary
}

收到的 AMQP 消息正文:

<binary data>