DICOM标准:DICOM服务类详解,了解存储服务类、查询/检索服务类(Q/R Service Class)和工作流管理服务类等原理

目录

一、概述

二、存储服务类(Storage Service Class)

存储操作(C-STORE)

确认操作(C-STORE-RSP)

三、查询/检索服务类(Query/Retrieve Service Class)

查询操作(C-FIND)

移动操作(C-MOVE)

获取操作(C-GET)

四、工作流管理服务类(Workflow Management Service Class)

工作列表操作(C-FIND)

工作流状态管理(N-CREATE、N-SET、N-GET)

工作流结果(N-DELETE)

五、DICOM服务类实例

存储服务类

查询/检索服务类

工作流管理服务类

六、总结


一、概述

DICOM(Digital Imaging and Communications in Medicine)标准不仅定义了数据模型,还包括多种服务类,用于在不同的医疗设备和系统之间传输和管理医学影像数据。DICOM服务类的目标是确保设备与系统间的互操作性,提高影像数据管理的效率和准确性。本文将重点介绍三种主要的DICOM服务类:存储服务类(Storage Service Class)、查询/检索服务类(Query/Retrieve Service Class)和工作流管理服务类(Workflow Management Service Class)。

二、存储服务类(Storage Service Class)

存储服务类是DICOM标准中最基本和最常用的服务类之一,用于在不同的设备和系统之间传输医学影像数据。存储服务类主要包括两个操作:存储(C-STORE)和确认(C-STORE-RSP)。

存储操作(C-STORE)
  1. 功能

    • 存储操作用于将DICOM对象从一个设备发送到另一个设备。通常,发送端设备(Service Class User, SCU)是影像生成设备,如CT机或MRI机,而接收端设备(Service Class Provider, SCP)是存储设备,如PACS(Picture Archiving and Communication System)。
  2. 请求消息

    • 请求消息包含DICOM对象的SOP Instance UID、数据元素和像素数据等。
  3. 过程

    • SCU将包含影像数据和相关元数据的DICOM对象打包成C-STORE请求消息,发送给SCP。
    • SCP接收请求消息,解析其中的数据元素,并将影像数据存储到本地数据库或文件系统中。
  4. 示例代码

         1)使用fo-dicom框架的实现  :

using Dicom;
using Dicom.Network;
using System;
using System.IO;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){// 创建DicomClient实例var client = new DicomClient();// 打开并加载DICOM文件var dicomFile = DicomFile.Open("path/to/dicom/file.dcm");// 创建一个C-STORE请求并添加到客户端client.AddRequest(new DicomCStoreRequest(dicomFile));// 配置客户端并建立连接client.NegotiateAsyncOps();await client.AddRequestAsync(new DicomCStoreRequest(dicomFile));// 向PACS系统发送请求await client.SendAsync("PACS_IP", 104, false, "SCU_AE", "PACS_AE");}
}

   2) 使用DCMTK库的实现: 

#include "dcmtk/dcmnet/dfindscu.h"
#include "dcmtk/dcmnet/dimse.h"
#include "dcmtk/dcmdata/dcdatset.h"
#include "dcmtk/dcmdata/dcfilefo.h"
#include <cstring>int main()
{OFCondition status;T_ASC_Network *net;T_ASC_Association *assoc;// 初始化网络status = ASC_initializeNetwork(NET_REQUESTOR, 0, 30, &net);if (status.bad()) return 1;// 请求建立关联T_ASC_Parameters *params;ASC_createAssociationParameters(&params, ASC_DEFAULTMAXPDU);ASC_setAPTitles(params, "SCU_AE", "PACS_AE", NULL);ASC_setTransportLayerType(params, false);ASC_setPresentationAddresses(params, "SCU_IP", "PACS_IP:104");status = ASC_requestAssociation(net, params, &assoc);if (status.bad()) return 1;// 打开并加载DICOM文件DcmFileFormat dcmff;dcmff.loadFile("path/to/dicom/file.dcm");// 创建C-STORE请求T_DIMSE_C_StoreRQ req;T_DIMSE_C_StoreRSP rsp;std::memset(&req, 0, sizeof(req));req.MessageID = assoc->nextMsgID++;strcpy(req.AffectedSOPClassUID, UID_CTImageStorage);dcmff.getDataset()->findAndGetOFString(DCM_SOPInstanceUID, req.AffectedSOPInstanceUID);req.Priority = DIMSE_PRIORITY_MEDIUM;req.DataSetType = DIMSE_DATASET_PRESENT;// 发送C-STORE请求status = DIMSE_storeUser(assoc, DIMSE_BLOCKING, 0, &req, NULL, dcmff.getDataset(), NULL, NULL, &rsp, NULL, DIMSE_DATASET_PRESENT);// 释放关联ASC_releaseAssociation(assoc);ASC_dropAssociation(assoc);ASC_dropNetwork(&net);return 0;
}

确认操作(C-STORE-RSP)
  1. 功能

    • 确认操作是对存储操作的响应消息。接收端设备(SCP)接收到DICOM对象后,发送确认消息给发送端设备(SCU),表示存储操作是否成功。
  2. 确认消息

    • 确认消息包含操作的状态码,如成功、失败或部分成功等。
  3. 过程

    • SCP在成功存储影像数据后,生成C-STORE-RSP响应消息,并将其发送回给SCU。状态码的解析和处理由SCU完成。
三、查询/检索服务类(Query/Retrieve Service Class)

查询/检索服务类用于在不同的设备和系统之间查询和检索医学影像数据。主要包括三个操作:查询(C-FIND)、移动(C-MOVE)和获取(C-GET)。

查询操作(C-FIND)
  1. 功能

    • 查询操作用于在DICOM数据库中查询特定条件的DICOM对象。查询条件可以包括患者姓名、患者ID、检查日期、影像类型等。
  2. 请求消息

    • 请求消息包含查询条件和返回数据元素的列表。
  3. 过程

    • SCU生成包含查询条件的C-FIND请求消息,并发送给SCP。
    • SCP根据查询条件在数据库中查找匹配的DICOM对象,并返回结果列表。
  4. 示例代码

          1)使用fo-dicom框架的实现  :

using Dicom;
using Dicom.Network;
using System;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){// 创建DicomClient实例var client = new DicomClient();// 创建一个C-FIND请求,查询患者姓名为"John Doe"的影像var request = new DicomCFindRequest(DicomQueryRetrieveLevel.Study){PatientName = "John Doe"};// 处理响应request.OnResponseReceived += (req, response) =>{Console.WriteLine(response.Dataset?.GetString(DicomTag.StudyInstanceUID));};// 添加请求到客户端client.AddRequest(request);// 向PACS系统发送请求await client.SendAsync("PACS_IP", 104, false, "SCU_AE", "PACS_AE");}
}

 2) 使用DCMTK库的实现: 

#include "dcmtk/dcmnet/dfindscu.h"int main()
{DcmFindSCU findscu;// 设置应用实体标题findscu.setAETitle("SCU_AE");findscu.setPeerAETitle("PACS_AE");findscu.setPeerHostName("PACS_IP");findscu.setPeerPort(104);// 创建查询数据集DcmDataset query;query.putAndInsertOFStringArray(DCM_PatientName, "John Doe");// 添加Presentation Contextfindscu.addPresentationContext(UID_FINDStudyRootQueryRetrieveInformationModel);// 发送C-FIND请求findscu.sendFindRequest("PACS_IP", 104, &query, UID_FINDStudyRootQueryRetrieveInformationModel);return 0;
}

移动操作(C-MOVE)
  1. 功能

    • 移动操作用于将DICOM对象从一个设备传输到另一个设备。在移动操作中,发送端设备(SCU)发送请求消息给接收端设备(SCP),请求将匹配的DICOM对象传输到指定的第三方设备。
  2. 请求消息

    • 请求消息包含DICOM对象的查询条件和目标设备的AE Title。
  3. 过程

    • SCU生成包含查询条件和目标设备AE Title的C-MOVE请求消息,并发送给SCP。
    • SCP根据查询条件查找匹配的DICOM对象,并将其传输到目标设备,同时向SCU发送C-MOVE-RSP确认消息。

  4. 代码示例   

         1)使用fo-dicom框架的实现  : 

using Dicom;
using Dicom.Network;
using System;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){// 创建DicomClient实例var client = new DicomClient();// 创建一个C-MOVE请求,查询患者姓名为"John Doe"的影像var request = new DicomCMoveRequest("TARGET_AE", DicomQueryRetrieveLevel.Study){PatientName = "John Doe"};// 处理响应request.OnResponseReceived += (req, response) =>{Console.WriteLine($"Move response: {response.Status}");};// 添加请求到客户端client.AddRequest(request);// 向PACS系统发送请求await client.SendAsync("PACS_IP", 104, false, "SCU_AE", "PACS_AE");}
}

 2) 使用DCMTK库的实现: 

#include "dcmtk/dcmnet/dmovescu.h"int main()
{DcmMoveSCU movescu;// 设置应用实体标题movescu.setAETitle("SCU_AE");movescu.setPeerAETitle("PACS_AE");movescu.setPeerHostName("PACS_IP");movescu.setPeerPort(104);// 创建查询数据集DcmDataset query;query.putAndInsertOFStringArray(DCM_PatientName, "John Doe");// 添加Presentation Contextmovescu.addPresentationContext(UID_MOVEStudyRootQueryRetrieveInformationModel);// 发送C-MOVE请求,将结果移动到TARGET_AEmovescu.sendMoveRequest("PACS_IP", 104, &query, UID_MOVEStudyRootQueryRetrieveInformationModel, "TARGET_AE");return 0;
}

获取操作(C-GET)
  1. 功能

    • 获取操作类似于移动操作,但不同的是,获取操作请求将DICOM对象传输回发送端设备(SCU)本身。
  2. 请求消息

    • 请求消息包含DICOM对象的查询条件。
  3. 过程

    • SCU生成包含查询条件的C-GET请求消息,并发送给SCP。
    • SCP根据查询条件查找匹配的DICOM对象,并将其传输回SCU,同时发送C-GET-RSP确认消息。

      4. 代码示例   

         1)使用fo-dicom框架的实现  : 

using Dicom;
using Dicom.Network;
using System;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){// 创建DicomClient实例var client = new DicomClient();// 创建一个C-GET请求,查询患者姓名为"John Doe"的影像var request = new DicomCGetRequest(DicomQueryRetrieveLevel.Study){PatientName = "John Doe"};// 处理响应request.OnResponseReceived += (req, response) =>{Console.WriteLine($"Get response: {response.Status}");};// 添加请求到客户端client.AddRequest(request);// 向PACS系统发送请求await client.SendAsync("PACS_IP", 104, false, "SCU_AE", "PACS_AE");}
}

   2) 使用DCMTK库的实现: 

#include "dcmtk/dcmnet/dgetscu.h"int main()
{DcmGetSCU getscu;// 设置应用实体标题getscu.setAETitle("SCU_AE");getscu.setPeerAETitle("PACS_AE");getscu.setPeerHostName("PACS_IP");getscu.setPeerPort(104);// 创建查询数据集DcmDataset query;query.putAndInsertOFStringArray(DCM_PatientName, "John Doe");// 添加Presentation Contextgetscu.addPresentationContext(UID_GETStudyRootQueryRetrieveInformationModel);// 发送C-GET请求getscu.sendGetRequest("PACS_IP", 104, &query, UID_GETStudyRootQueryRetrieveInformationModel);return 0;
}

四、工作流管理服务类(Workflow Management Service Class)

工作流管理服务类用于管理医疗影像工作流程,如预约、检查、报告等。主要包括四个操作:工作列表(C-FIND)、工作流状态(N-CREATE、N-SET、N-GET)和工作流结果(N-DELETE)。

工作列表操作(C-FIND)
  1. 功能

    • 工作列表操作用于查询DICOM工作列表,获取待处理的检查任务。工作列表可以包含患者信息、检查类型、预约时间等。
  2. 请求消息

    • 请求消息包含查询条件和返回数据元素的列表。
工作流状态管理(N-CREATE、N-SET、N-GET)
  1. N-CREATE

    • 功能:用于创建新的工作流实例,表示一个新的检查任务。
    • 请求消息:包含新的工作流实例的详细信息,如患者信息、检查类型等。
  2. N-SET

    • 功能:用于更新工作流实例的状态,如检查开始、检查完成等。
    • 请求消息:包含工作流实例的唯一标识符和新的状态信息。
  3. N-GET

    • 功能:用于获取工作流实例的详细信息。
    • 请求消息:包含工作流实例的唯一标识符。
工作流结果(N-DELETE)
  1. 功能

    • 用于删除工作流实例,表示检查任务已完成并从工作列表中移除。
  2. 请求消息

    • 包含工作流实例的唯一标识符。
五、DICOM服务类实例

为了更好地理解DICOM服务类的概念和应用场景,我们以一个具体的实例进行说明。假设我们有一个PACS系统和一个影像工作站,需实现以下操作:

存储服务类
  1. 操作描述

    • 影像工作站生成一张新的CT图像,并将其存储到PACS系统中。
    • 影像工作站发送C-STORE请求消息,将CT图像对象传输到PACS系统。
    • PACS系统接收到CT图像对象后,发送C-STORE-RSP确认消息给影像工作站,表示存储操作成功。
  2. 过程与技术

    • 影像工作站使用图像采集设备(如CT机)生成DICOM对象,包含影像数据和元数据。
    • DICOM对象通过网络传输协议发送至PACS系统,PACS系统解析并存储图像。
    • PACS系统将操作结果通过C-STORE-RSP消息反馈给影像工作站。
查询/检索服务类
  1. 操作描述

    • 医生在影像工作站上查询某个患者的所有CT影像。
    • 影像工作站发送C-FIND请求消息,查询PACS系统中的CT影像对象。
    • PACS系统返回匹配的CT影像对象列表给影像工作站。
    • 医生选择其中一张CT影像,并请求将其传输到影像工作站进行查看。
    • 影像工作站发送C-MOVE请求消息,请求PACS系统将CT影像对象传输到影像工作站。
    • PACS系统将CT影像对象传输到影像工作站,并发送C-MOVE-RSP确认消息。
  2. 过程与技术

    • 影像工作站通过网络协议与PACS系统建立连接。
    • 影像工作站发送C-FIND请求,PACS系统查询数据库并返回匹配结果。
    • 影像工作站选择需要的影像,发送C-MOVE请求,PACS系统将影像传输至影像工作站。
    • PACS系统确认传输成功并发送C-MOVE-RSP消息。
工作流管理服务类
  1. 操作描述

    • 放射科接收到一位新患者的CT检查预约。
    • PACS系统发送N-CREATE请求消息,创建新的工作流实例,表示一个新的CT检查任务。
    • 检查开始时,影像工作站发送N-SET请求消息,更新工作流实例的状态为“检查开始”。
    • 检查完成后,影像工作站发送N-SET请求消息,更新工作流实例的状态为“检查完成”。
    • 医生查看和报告完毕后,PACS系统发送N-DELETE请求消息,删除工作流实例,表示检查任务已完成并从工作列表中移除。
  2. 过程与技术

    • PACS系统接受预约信息,生成新的工作流实例并发送N-CREATE请求。
    • 在检查流程中,影像工作站通过N-SET消息更新工作流状态。
    • 检查完成后,工作流状态再次更新为“检查完成”。
    • 医生完成报告后,PACS系统通过N-DELETE消息删除工作流实例。
六、总结

        DICOM服务类定义了多种操作,用于在不同的医疗设备和系统之间传输和管理医学影像数据。通过理解存储服务类、查询/检索服务类和工作流管理服务类的概念、应用场景和操作原理,我们可以更好地实现医学影像数据的互操作性和工作流管理。具体实例有助于我们掌握这些服务类在实际应用中的操作和流程,提高医疗影像数据管理的效率和准确性。

        通过深入了解DICOM服务类的各个方面,我们能够更好地在实际医疗环境中应用这些标准和技术,以提高医疗影像数据的传输和管理效率,增强不同设备和系统间的互操作性,从而更好地服务于医疗实践和病人护理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八,Linux基础环境搭建(CentOS7)- 安装Mysql和Hive

Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装Mysql和Hive 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01; 一、Mysql下载及安装 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Orac…

Virtuoso使用layout绘制版图、使用Calibre验证DRC和LVS

1 绘制版图 1.1 进入Layout XL 绘制好Schmatic后&#xff0c;在原理图界面点击Launch&#xff0c;点击Layout XL进入版图绘制界面。 1.2 导入元件 1、在Layout XL界面左下角找到Generate All from Source。 2、在Generate Layout界面&#xff0c;选中“Instance”&#…

Spring事务的实现方式

前言 Spring的spring-tx模块提供了对事务管理支持&#xff0c;使用Spring事务可以让我们从复杂的事务处理中得到解脱&#xff0c;无需去处理获得连接、关闭连接、事务提交和回滚等这些操作。Spring事务管理是Spring框架提供的一个核心功能&#xff0c;它允许开发者以声明式或编…

线性代数(1)——线性方程组的几何意义

线性代数的基本问题是求解个未知数的个线性方程&#xff1b; 例如&#xff1a;&#xff08;方程1&#xff09;。 在线性代数的第一讲中&#xff0c;我们从Row Picture、Column Picture、Matrix Picture三个角度来看这个问题。 上面的系统是二维的。通过添加第三个变量&#…

没有对象来和我手撕红黑树吧

1. 红黑树的介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;在每一个节点增加了一个存储位来表示节点的颜色&#xff0c;可以是红色也可以是黑色&#xff0c;通过约束颜色来维持树的平衡&#xff0c;具有以下的性质&#xff1a; 每个节点不是红色就是黑色根节点为黑色如果…

Android中SurfaceView与GLSurfaceView 的关系

SurfaceView 与 GLSurfaceView 的关系 在 Android 开发中&#xff0c;SurfaceView 和 GLSurfaceView 是实现自定义渲染效果的关键组件。它们提供了不同的渲染方式&#xff0c;适用于不同的应用场景。我们将通过以下几个方面详细说明 SurfaceView 和 GLSurfaceView 的特点及实现…

DEVOPS: 容器与虚拟化与云原生

概述 传统虚拟机&#xff0c;利用 hypervisor&#xff0c;模拟出独立的硬件和系统&#xff0c;在此之上创建应用虚拟机是一个主机模拟出多个主机虚拟机需要先拥有独立的系统docker 是把应用及配套环境独立打包成一个单位docker 是在主机系统中建立多个应用及配套环境docker 是…

H7-TOOL的LUA小程序教程第16期:脉冲测量,4路PWM,多路GPIO和波形打印(2024-10-25, 更新完毕)

LUA脚本的好处是用户可以根据自己注册的一批API&#xff08;当前TOOL已经提供了几百个函数供大家使用&#xff09;&#xff0c;实现各种小程序&#xff0c;不再限制Flash里面已经下载的程序&#xff0c;就跟手机安装APP差不多&#xff0c;所以在H7-TOOL里面被广泛使用&#xff…

西瓜书《机器学习》符号表KaTex表示

写这篇post的缘故是最近整理机器学习的相关公式&#xff0c;经常要用到 KaTeX \KaTeX KATE​X, 但网络上搜索到的西瓜书符号表的表示有些并不准确或不严谨&#xff0c;本着严谨治学的态度&#xff0c;整理了一下符号表的 KaTeX \KaTeX KATE​X表示&#xff0c;希望有所帮助,整理…

docker的安装配置与基本简单命令

目录 1.docker简介 2.docker安装 2.1使用root用户登陆 更新yum源 2.2安装依赖 2.3设置yum源 更新yum源索引 2.4安装docker 2.5启动并且设置开机自启动 2.6验证安装是否成功 2.7配置docker加速器 2.8重启docker服务 3.docker简单使用 3.1下载镜像 3.2列出…

从线性代数到unity mvp矩阵

坐标变换&#xff1a;矩阵是一种线性空间变换的描述&#xff08;矩阵的列向量&#xff0c;是坐标变换后的基向量&#xff09;。 如: 如上图,即向量(-1,2)在经过由基底x轴:(1, -2) ,y轴:(3, 0)组成的矩阵变换后得到向量(5,2) 实际上就是-1倍的x轴:(1, -2)加上2倍的y轴:(3,…

线程同步 线程安全

这里写目录标题 线程安全互斥锁**互斥锁初始化****互斥锁加锁和解锁****销毁互斥锁****互斥锁死锁****互斥锁的属性** 条件变量条件变量初始化通知和等待条件变量条件变量的判断条件 自旋锁自旋锁初始化自旋锁加锁和解锁 读写锁读写锁初始化读写锁上锁和解锁读写锁的属性 线程安…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释&#xff1a; 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述&#xff1a; 导入库&#xff1a;代码首先导入必要的库&#xff1a; cv2&#xff1a;用于图像和视频处理…

蓝桥杯基本算法~~~一维/二维前缀和问题

文章目录 1.一维前缀和2.二维前缀和3.移动零问题4.颜色的分类问题 1.一维前缀和 问题说明&#xff1a;一维就是表示的是一维数组的计算&#xff0c;我们的这个一维前缀和是基于这个一维数组进行计算的&#xff1b; 什么是前缀和&#xff1a;就是10 20 30 40 50这个数组&#…

ubuntu20.04系统安装

文章目录 前言参考1 一、准备工作1、进入BIOS&#xff0c;设置 UEFI/Legacy Boot选项 为UEFI2、进入BIOS界面将Secure Boot禁用3、USB启动为enable 二、单系统安装1、插入U盘&#xff0c;电脑正常开机后 总结 前言 装了很多次ubuntu系统&#xff0c;整理一篇自己的文章很费时间…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的&#xff0c;使模块能够按需加载&#xff0c;使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

【宠物狗狗数据集】 犬类品种识别 宠物狗检测 深度学习 目标检测(含数据集)

一、背景意义 随着人们对宠物狗的喜爱日益增加&#xff0c;犬种的多样性也逐渐受到重视。狗狗不仅是家庭的好伴侣&#xff0c;更在多个领域中发挥着重要作用&#xff0c;如导盲、搜救、疗愈等。因此&#xff0c;准确识别和分类各种犬种显得尤为重要。传统的犬种识别方法往往依赖…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

虚拟机桥接模式连不上,无法进行SSH等远程操作

说明&#xff1a;以下情况在window10上遇到&#xff0c;解决后顺便做了个笔记&#xff0c;以防后续再次用到&#xff0c;也给同道中人提供一个解决方案 一、首先按照以下步骤进行检查 1、是否连接了对应的wifi 2、是否设置了桥接模式 3、上述1、2确认无误的情况下请查看右上…

ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用

本文整理于 2024 年云栖大会阿里云智能集团高级技术专家金吉祥&#xff08;牟羽&#xff09;带来的主题演讲《ApsaraMQ Serverless 能力再升级&#xff0c;事件驱动架构赋能 AI 应用》 云消息队列 ApsaraMQ 全系列产品 Serverless 化&#xff0c;支持按量付费、自适应弹性、跨可…