好的,我们继续接上一篇的内容,开始对3GPP TS 29.517规范进行逐章拆解。今天,我们的旅程将深入到规范的核心腹地——第四章:Naf_EventExposure服务。
深度解析 3GPP TS 29.517:章节 4 Naf_EventExposure服务 (服务化描述与操作流程)
本文技术原理深度参考了3GPP TS 29.517 V18.9.0 (2025-03) Release 18规范中,关于“Chapter 4 Naf_EventExposure Service”的核心章节,旨在为读者详细拆解该服务的顶层设计、架构角色以及核心的订阅-通知交互流程。
在上一篇文章中,我们为即将开始的深度探索奠定了坚实的基础,明确了规范的战场边界、知识图谱和通用口令。现在,我们正式进入战场的核心区域。第四章是整本规范的“灵魂”,它从概念层面完整描述了Naf_EventExposure服务是什么、由谁参与、以及参与方之间如何互动。
对于我们故事的主角,**“云游互动”**的技术总监“张工”而言,第四章就是项目的“总体设计文档”。它定义了他们需要构建的AF服务必须具备的核心能力和行为逻辑。他需要带领团队,将本章描述的每一个概念、每一个流程,都转化为坚实可靠的代码实现。
1. 服务描述 (Section 4.1 Service Description)
本节首先从宏观上对Naf_EventExposure服务进行了定性描述,是理解服务本质的起点。
1.1 概述 (Section 4.1.1 Overview)
The Application Function Exposure Service, as defined in 3GPP TS 23.502 and 3GPP TS 23.288, is provided by the Application Function (AF). … This service:
- allows NF service consumers to subscribe, modify and unsubscribe for application events; and
- notifies NF service consumers with a corresponding subscription about observed events on the AF.
开篇明义,规范再次强调了服务的提供者是AF(应用功能),并指出了其两个最基本、最核心的能力:
- 管理订阅: AF必须能够处理来自网络功能(NF)消费者的订阅(
subscribe)、修改(modify)和取消订阅(unsubscribe)请求。这要求AF具备一个管理订阅生命周期的能力模块。 - 发送通知: 当AF观测到符合订阅条件的事件时,它有责任主动向消费者发送通知(
notifies)。这是一个从应用侧到网络侧的主动推送过程。
场景代入: “张工”对他的后端团队说:“我们的AF服务器需要开发两大核心模块。第一,‘订阅管理模块’,它要能处理来自运营商NWDAF的HTTP请求,安全地创建、更新和删除订阅记录,就像管理网站的用户注册信息一样。第二,‘事件通知模块’,它需要连接我们的游戏核心业务逻辑,一旦发现玩家‘莉莉’的游戏体验指标异常,就要立即打包成一个JSON,通过HTTP POST推给NWDAF。”
接下来,规范用一个列表详细阐述了AF可以暴露的事件类型。这是整个服务的“能力清单”,也是其价值的直接体现。
The types of observed events include: AF application events exposed by AF:
- Service Experience information for an application;
- UE mobility information;
- UE communication information;
- Exceptions information;
- User Data Congestion information;
- Collective Behaviour information;
- Dispersion information;
- Performance Data information; and
- GNSS Assistance Data information UE application events exposed via Data Collection AF:
- Media Streaming QoE metrics; … and more
这个列表非常关键,我们将其整理并结合“云游互动”的场景进行解读:
| 事件类型 (Event Type) | 中文解释 | “云游互动”场景应用 |
|---|---|---|
| Service Experience | 服务体验信息 | 核心场景:玩家“莉莉”的游戏MOS分、时延、丢包率等QoE指标下降,AF将此事件上报。 |
| UE mobility | UE移动性信息 | “莉リ”在高速地铁上玩游戏,AF可以上报她的移动轨迹,帮助网络预测切换、优化覆盖。 |
| UE communication | UE通信信息 | AF可以上报“莉莉”的游戏数据流(上行/下行流量、通信时长)信息,用于网络侧的流量建模。 |
| Exceptions | 异常信息 | 游戏应用本身检测到特定异常,如“音频流突然中断”、“关键信令交互失败”等。 |
| User Data Congestion | 用户数据拥塞信息 | AF感知到某个区域内大量玩家同时出现上行数据发送拥塞(例如,都在进行游戏内直播)。 |
| Collective Behaviour | 群体行为信息 | AF分析发现,某个区域的一群玩家正在以相似的速度朝同一个方向移动(可能是一个车队在玩游戏)。 |
| Dispersion | 离散信息 | AF上报某个区域内玩家的分布情况,或者是一组玩家从集中到分散的动态过程。 |
| Performance Data | 性能数据信息 | AF上报与DN(数据网络)性能相关的分析数据,如应用服务器到UE的端到端性能指标。 |
| GNSS Assistance Data | GNSS辅助数据 | 对于需要高精度定位的游戏场景,AF可以向网络提供GNSS辅助数据,以帮助LMF更快地定位UE。 |
| Media Streaming … | 媒体流相关事件 | 如果游戏内嵌了高清视频流,可以复用5GMS框架,上报详细的视频QoE指标。 |
通过这张表,“云游互动”团队可以清晰地看到,他们不仅可以上报“莉莉”的个人体验,还能上报群体玩家的行为模式、网络拥塞状况、甚至是专业的性能分析数据。这为网络智能化提供了丰富、多维度的“养料”。
1.2 服务架构 (Section 4.1.2 Service Architecture)
本节通过架构图和文字,明确了服务中的各个角色及其关系。
The Application Function Exposure Service (Naf_EventExposure) is part of the Naf service-based interface exhibited by the Application Function (AF). The known NF service consumers of the Naf_EventExposure service are the Network Exposure Function (NEF), the Network Data Analytics Function (NWDAF), the Location Management Function (LMF), the Data Collection Coordination Function (DCCF), the Messaging Framework Adaptor Function (MFAF), or the Event Consumer AF in the 5GMS ASP.
规范在这里详细列出了服务的消费者(Consumers),再次强调了NWDAF的核心地位。同时,也引出了NEF、LMF等其他潜在消费者,展示了服务的广泛适用性。
规范原文中的 “Figure 4.1.2-1: Naf_EventExposure service Architecture, SBI representation” 和 “Figure 4.1.2-2: Naf_EventExposure service Architecture, reference point representation” 从两个不同视角描绘了这种关系。
- SBI表示法 (Figure 4.1.2-1):这是5G核心网的现代化视角。图中,AF作为服务提供者(Producer),暴露了
Naf_EventExposure服务。所有消费者(NWDAF, NEF, LMF等)都作为服务消费者(Consumer),通过统一的服务化总线与AF进行交互。这体现了SBA架构的解耦和灵活性。 - 参考点表示法 (Figure 4.1.2-2):这是更传统的架构视角,用带有箭头的线段表示两者之间的参考点接口。虽然形式不同,但表达的逻辑关系是一致的:信息流是从各个消费者流向AF(订阅),再从AF流回消费者(通知)。
场景代入:
“张工”向架构师解释:“看这两张图,我们的AF在SBA世界里是一个标准的服务提供者。我们不需要为NWDAF、NEF、LMF分别开发不同的私有接口。我们只需要实现一个标准的Naf_EventExposure服务,并将它注册到NRF(网络功能仓库)。之后,任何有权限的NF消费者都可以通过标准方式发现并使用我们的服务。这就是SBA的魅力所在,一次开发,处处可用。”
1.3 网络功能角色定义 (Section 4.1.3 Network Functions)
本节对架构中的两个核心功能实体——AF和服务消费者——进行了明确的定义。
4.1.3.1 Application Function (AF) The AF is a functional element that provides service or application related information to NF service consumers. The AF allows NF service consumers to subscribe to and unsubscribe from periodic notifications and/or notifications related to the detection of subscribed event.
这里再次强调了AF作为“应用相关信息提供者”的角色,并点明了其支持订阅/退订以及周期性或事件触发的通知能力。
4.1.3.2 NF Service Consumers The Network Data Analytics Function (NWDAF), the Data Collection Coordination Function (DCCF), and the Messaging Framework Adaptor Function (MFAF):
- supports (un)subscribing to notifications of event(s) as described in clause 4.2.2.1;
- supports receiving the notifications of subscribed event(s) from the AF. The Network Exposure Function (NEF): … The Event Consumer Application Function (Event Consumer AF): … The Location Management Function (LMF): …
这段文字详细描述了每个消费者的基本能力,即它们都必须支持发起订阅/退订操作,并能够接收和处理AF发送的通知。这是作为服务消费者最基本的要求。
2. 服务操作 (Section 4.2 Service Operations)
如果说4.1节是静态的“角色介绍”,那么4.2节就是动态的“剧情展开”。它详细定义了AF与消费者之间交互的具体流程和步骤。
2.1 操作简介 (Section 4.2.1 Introduction)
本节首先通过一个表格,高度概括了整个服务包含的三大操作。
Service operations defined for the Naf_EventExposure Service are shown in table 4.2.1-1.
我们1:1重绘并解读这张核心表格:
Table 4.2.1-1: Naf_EventExposure Service Operations
| 服务操作名称 (Service Operation Name) | 描述 (Description) | 发起方 (Initiated by) |
|---|---|---|
| Naf_EventExposure_Subscribe | NF服务消费者使用此服务操作来向AF订阅或修改一个关于特定应用事件的通知。可以针对一个或多个UE,或任何UE。 | NF Consumer (NWDAF, NEF, Event Consumer AF, LMF) |
| Naf_EventExposure_Unsubscribe | NF服务消费者使用此服务操作来取消事件通知的订阅。 | NF Consumer (NWDAF, NEF, Event Consumer AF, LMF) |
| Naf_EventExposure_Notify | AF使用此服务操作向已订阅的NF服务消费者报告应用相关的事件。 | AF / Data Collection AF |
这张表格清晰地划分了职责:
- 消费者(如NWDAF)是主动方:负责发起
Subscribe和Unsubscribe,明确表达自己的需求。 - 提供者(AF)是响应和报告方:被动地处理订阅请求,并在事件发生时主动发起
Notify操作。
2.2 订阅服务操作 (Section 4.2.2 Naf_EventExposure_Subscribe service operation)
这是所有交互的起点,也是最复杂、最重要的操作。规范将其细分为“创建新订阅”和“修改已有订阅”两个流程。
2.2.1 创建新订阅 (Section 4.2.2.2 Creating a new subscription)
这个流程描述了消费者如何从无到有地建立一个订阅。
Figure 4.2.2.2-1 illustrates the creation of a subscription.
- NF service consumer --- (1. POST …/subscriptions) -⇒ AF
- NF service consumer ⇐- (2. “201 Created”) --- AF
这个流程图展示了一个标准的RESTful资源创建过程:
- 消费者向AF的
/subscriptions集合资源发送一个HTTPPOST请求。 - AF成功处理请求后,返回一个
201 Created的HTTP状态码。
请求的细节隐藏在文字描述中:
To subscribe to event notifications, the NF service consumer shall send an HTTP POST request to the AF with: “{apiRoot}/naf-eventexposure/
/subscriptions” as request URI … and the AfEventExposureSubsc data structure as request body.
这里的核心是AfEventExposureSubsc数据结构,它承载了订阅的所有信息。规范在后续的多段文字中,详细拆解了这个数据结构的关键字段:
eventsSubs: 【必需】 描述要订阅的事件。eventsRepInfo: 【必需】 描述事件的上报规则(如上报方式、频率)。notifUri: 【必需】 消费者提供的用于接收通知的回调地址。notifId: 【必需】 消费者提供的用于关联通知的ID。
其中,eventsSubs内部又包含event(事件类型)和eventFilter(事件过滤器)。eventFilter是实现精准订阅的“瑞士军刀”,它包含:
- 目标UE标识:
gpsis,supis,exterGroupIds,interGroupIds,anyUeInd,ueIpAddr。 - 目标应用标识:
appIds。 - 目标区域:
locArea。
场景代入:一次完整的订阅请求创建 运营商的NWDAF为了精细化监控“云游互动”的游戏质量,决定创建一个订阅。它会执行以下步骤:
- 构建
AfEventExposureSubsc对象 (JSON):{ "eventsSubs": [ { "event": "SVC_EXPERIENCE", "eventFilter": { "appIds": ["game-starexpedition-01"], "anyUeInd": true } } ], "eventsRepInfo": { "notifMethod": "ON_EVENT_DETECTION" }, "notifUri": "https://nwdaf.operator.com/af-events", "notifId": "sub-qoe-monitoring-123" } - 发起HTTP POST请求:
POST /naf-eventexposure/v1/subscriptionsHost: yunyou-af.operator.comContent-Type: application/json- 请求体为上述JSON。
“云游互动”的AF收到请求后,会进行解析和验证,如果成功,则:
- 在数据库中创建一条订阅记录。
- 生成一个唯一的
subscriptionId,例如sub-af-xyz789。 - 返回HTTP响应:
HTTP/1.1 201 CreatedLocation: /naf-eventexposure/v1/subscriptions/sub-af-xyz789- 响应体中可能包含AF确认后的完整订阅信息。
至此,一个订阅关系就牢固地建立起来了。
2.2.2 修改已有订阅 (Section 4.2.2.3 Modifying an existing subscription)
如果NWDAF想调整之前的订阅,比如延长监控时间或更换接收通知的地址,它就会使用修改流程。
Figure 4.2.2.3-1 illustrates the modification of an existing subscription. To modify an existing subscription …, the NF service consumer shall send an HTTP PUT request with: “{apiRoot}/naf-eventexposure/
/subscriptions/{subscriptionId}” as request URI…
这个流程使用的是HTTP PUT方法,针对的是某个已存在的特定订阅资源(通过{subscriptionId}指定)。消费者在请求体中提供一份完整的、更新后的AfEventExposureSubsc数据。AF收到后会用这份新数据完全替换旧的订阅数据。
场景代入:
NWDAF的通知接收服务需要升级,地址从/af-events变为/v2/af-events。它会发起一个PUT请求:
PUT /naf-eventexposure/v1/subscriptions/sub-af-xyz789- 请求体中是完整的订阅信息,但
notifUri字段已更新为"https://nwdaf.operator.com/v2/af-events"。 - AF成功后返回
200 OK或204 No Content。
2.3 取消订阅服务操作 (Section 4.2.3 Naf_EventExposure_Unsubscribe service operation)
这是一个简单的清理操作。
Figure 4.2.3.2-1 illustrates the unsubscription from event notifications. To unsubscribe from event notifications, the NF service consumer shall send an HTTP DELETE request with “{apiRoot}/naf-eventexposure/
/subscriptions/{subscriptionId}” as request URI…
消费者通过向特定的订阅资源URL发送HTTP DELETE请求,来通知AF删除该订阅。AF成功删除后,返回204 No Content。之后,AF将不再为该订阅发送任何通知。
2.4 通知服务操作 (Section 4.2.4 Naf_EventExposure_Notify service operation)
这是AF主动发起的、体现服务价值的关键一步。
Figure 4.2.4.2-1 illustrates the notification about subscribed events. If the AF observes application related event(s) for which an NF service consumer has subscribed, the AF shall send an HTTP POST request … with the “{notifUri}” as request URI … and the AfEventExposureNotif data structure.
流程如下:
- AF内部观测到一个事件(例如,玩家“莉莉”的MOS分降到2.5)。
- AF检查其订阅数据库,发现这个事件匹配了NWDAF创建的
sub-af-xyz789订阅。 - AF从订阅记录中查到对应的
notifUri(https://nwdaf.operator.com/v2/af-events) 和notifId(sub-qoe-monitoring-123)。 - AF构建一个
AfEventExposureNotif作为请求体,其中notifId被设为"sub-qoe-monitoring-123",eventNotifs数组中包含描述“莉莉”体验下降的详细信息。 - AF向该
notifUri发起HTTPPOST请求。 - NWDAF接收到请求后,根据
notifId找到对应的订阅上下文,处理事件信息,并返回204 No Content表示成功接收。
规范在4.2.4.2中用一个长列表(1到17项)详细说明了AfEventExposureNotif中可以携带的各种事件的具体信息结构,例如:
- 如果
event是SVC_EXPERIENCE,通知中应包含svcExprcInfos字段。 - 如果
event是UE_MOBILITY,通知中应包含ueMobilityInfos字段。 - …依此类推。
这确保了通知内容的标准化和可解析性。
FAQ环节
Q1:在订阅时,消费者如何决定是创建新订阅(POST)还是修改已有订阅(PUT)?
A1:这取决于业务意图。如果消费者想建立一个全新的、独立的监控任务,它应该使用POST创建一个新订阅,并会获得一个新的subscriptionId。如果它只是想调整一个已在运行的监控任务的参数(比如延长监控时间、增加一个监控区域),它应该使用PUT和已知的subscriptionId来更新该订阅。PUT是幂等的,即多次用同样的内容PUT同一个资源,效果是一样的。
Q2:AF在发送通知(Notify)时,如果消费者(如NWDAF)的网络暂时不可用,导致POST请求失败,AF应该怎么办? A2:这是一个非常实际的工程问题。3GPP规范本身通常不定义具体的重传机制细节,而是将其留给底层的HTTP传输协议或具体的实现来保证。在SBA框架(TS 29.500)中,通常会建议服务提供者具备一定的重传能力。一个健壮的AF实现应该包含一个带退避策略的重传队列。例如,第一次发送失败后,等待1秒重试,再失败则等待2秒,4秒… 直到达到最大重试次数或超时时间,然后可能会丢弃该通知或记录一条告警。
Q3:为什么规范要区分SBI表示法和参考点表示法两种架构图?
A3:这是为了同时满足不同背景的读者。参考点表示法(如 AF-NEF 之间的 T8 接口)是2G/3G/4G时代传统的架构表示方式,它强调两个特定网元之间的点对点接口,对于理解传统的信令流程很有帮助。而SBI表示法是5G SBA的核心思想,它强调的是“服务”而非“接口”,任何授权的NF消费者都可以调用任何NF提供者暴露的服务,更加灵活和云原生。提供两种视图有助于从传统架构思维平滑过渡到服务化架构思维。
Q4:如果一个AF同时为多个应用(如游戏、视频、社交)提供服务,消费者如何只订阅其中一个应用的事件?
A4:这正是eventFilter中appIds字段的作用。消费者在创建订阅时,可以在eventFilter中明确指定一个或多个应用标识符(ApplicationId)。这样,AF在收到订阅请求后,就会将该订阅与特定的应用关联起来。当事件发生时,AF会检查事件源自哪个应用,只有当应用ID与订阅中appIds列表匹配时,才会触发通知。
Q5:Data Collection AF在事件暴露中扮演什么特殊角色?
A5:Data Collection AF是特定场景(尤其是5GMS媒体流)下的一个专职AF。它的唯一任务就是从UE的应用客户端(如播放器)收集数据,它本身不提供最终的业务。然后,它利用Naf_EventExposure服务,将收集到的标准化数据(如详细的QoE指标)暴露给真正需要这些数据的其他NF或业务AF(如视频服务商的AF)。它像一个“数据中转站”或“前线情报官”,将原始数据进行标准化收集和上报,简化了业务AF的工作。