全部产品

MNS消息回执通知

更新时间:2020-09-09 14:42:10

本文以异步查询OSS数据为例,介绍如何在DLA中使用MNS做消息回执通知。

前提条件

  1. 开通OSS服务

    在DLA中异步执行SQL时,必须开通OSS服务,存储SQL执行结果。

  2. 创建存储空间

  3. 开通消息服务MNS

    MNS和DLA所属Region相同

  4. 创建队列

  5. 通过向导创建OSS表

操作步骤

步骤一: 新建RAM角色

  1. 使用DLA所属账号登录RAM控制台

  2. 单击RAM角色管理 > 新建RAM角色,在新建RAM角色页面进行以下配置。

    • 可信实体类型选择阿里云账号

    • 受信云账号选择当前云账号

    • RAM角色名称AliyunOpenAnalyticsAccessingMNSRole

      创建RAM角色

步骤二: 修改角色授信策略

在RAM角色列表中单击刚刚创建的角色,切换至RAM角色内容页签,单击修改信任策略,用以下策略替换原始策略。

{
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "openanalytics.aliyuncs.com"
                ]
            }
        }
    ],
    "Version": "1"
}

修改角色

步骤三: 修改角色权限

在RAM角色列表中单击刚刚创建的角色,单击角色右侧的添加权限为角色添加系统权限策略AliyunMNSFullAccess

添加授权策略

步骤四:异步执行SQL并使用MNS做消息回执通知

语法

/*+ run_async=true, mq-notify-by=mns, mq-queue=${您的mns队列} */ 
select * from xxxx ....;

示例

/*+ run-async=true,mq-notify-by=mns,mq-queue=dla */ select * from oss_schema.oss_json;

执行上述SQL,得到SQL任务IDASYNC_TASK_ID,例如q201903251653hze921092f0012820。通过show query_task得到mq_message_id

mysql> show query_task where id = 'q201903251653hze921092f0012820'\G
*************************** 1. row ***************************
                  id: q201903251653hze921092f0012820
        mpp_query_id: 20190322_120525_12951_rdxtt
              status: SUCCESS
           task_name: SELECT
        table_schema: oss_schema
             command: /*+ run-async=true,mq-notify-by=mns,mq-queue=dla */ select * from oss_schema.oss_json
          creator_id: ${您的dla账号}
         create_time: 2019-03-25 16:04:55
         update_time: 2019-03-25 16:04:55
       connection_id: 49409305027991
             message: 
           row_count: 4
         elapse_time: 351
   scanned_row_count: 4
  scanned_data_bytes: 230
result_file_oss_file: oss://aliyun-oa-query-results-****-oss-cn-hangzhou/DLA_Result/2019/03/25/q201903251653hze921092f0012820/result.csv
    cancellable_task: 0
          mq_product: mns
            mq_model: queue
            mq_topic: NULL
            mq_queue: dla
      mq_producer_id: NULL
         mq_endpoint: http://${您的uid}.mns.cn-hangzhou-internal.aliyuncs.com
           mq_status: SUCCESS
        mq_error_msg: NULL
       mq_message_id: 76218C7EAF7361357FA57F38FB3BD66F
       mq_total_time: 307
1 row in set (0.02 sec)

mq_message_id就是MNS返回的id76218C7EAF7361357FA57F38FB3BD66F,通过mq_message_id,可以在MNS控制台上接收DLA消息。

接收消息

查询消息

MNS成功接收DLA消息后,您就可以通过MNS实时了解DLA异步执行SQL的任务详情。关于MNS,请参见消息服务 MNS