开发者学堂课程【消息队列 MNS (RocketMQ 轻量版)入门课程:手把手系列:消息队列 MNS 实操讲】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1236/detail/18411
手把手系列:消息队列 mns 实操讲解
内容介绍:
一、产品概述
二、模型
三、使用方式
一、产品概述
大家好,欢迎收看本次的一个实战课程,本次主要为大家去介绍mns的操作,还有包括它的相关演示,首先可以先去看一下mns到底是什么,以及它的主流的一些概念是什么,然后可以更方便的去理解和包括使用这款产品,在前面几个课程中也了解到,他其实是一个类似于的分布式的一个相应队列,它其实是有两个模型去组成的。
二、模型
第一个模型叫队列模型,叫做q第二个模型其实是我们的主题模型,叫做topic,所以说mns它主要的使用方式还有包括特性,其实也就是围绕这两个模型去展开。
那第一个就是比较经典的一个类似于1V1的消费,包括发送生产的一个模型,一端是生产者,另一端是消费者,然后每一条记录,只能被唯一的消费者所去做消费,就比方说我去发一个message等于12345,发下去,那就意味着下游端只有一个消费者可以接受到message等于12345的这条消息,这就是我们的简单队列模型,它是一个精简的1:1的一个模型。
第二个模型叫做topic主题模型,它其实是一个类似于广播的一个模式,可以直接把的message到一个topic上面,然后通过去转发到各个q,然后再通过各个q来去做消费,其实是一个比较经典的类似于发布订阅的一个模型,一端是发送端,另一端是订阅端,订阅端可以选择订阅,也可以选择不订阅,它其实是一个类似于推送或者是类似于pose一个逻辑。以上就是简单对mns的结构的介绍,概述各类是简单的一些类似阐述。
三、使用方式
下面来介绍控制台的一个使用方式以及mns控台的一些类似于使用的一些小技巧,还有包括它一些功能点,首先打开浏览器,然后找到阿里云的一个类似控制台,选择登陆,然后找到mns这款产品,然后去创建队列,比方说选test 123,点确定,那这样的一个队列的能力就创建完成了,现在这里其实只有对于刚刚去讲的1:1的一个模型,控制台有一些监控,比方说可用消息,包括定时消息,其实都是有展示的,以及现在的一个地址以及它的类似于一些类似监控告警的演示,都会有一些比较详细的一些展示,类似于快速收发的一个能力,比方说去写123,点发送,那其实是已经就把这条消息发送到了消息队列里面,然后点击接收,就可以接收到刚刚所发送的一个消息,就是message 123,这是简单的一个在控制台侧的手法体验,它其实是一个类似1:1的模型,从a端到b端的一个类似于传统的比较直接的模型,创建msq,同时在这里也可以删掉,以上就是msq的一个类似于我们的操作控台。
第二个,类似于去写topic 30创建,已经创建完了一个topic,topic可能其实是需要订阅的,可以在里面去创建一个订阅者,点确定,那就可以直接为了演示方便,去建两个队列,可以在订阅处创建一个订阅,队列名称写123,那再去创建一个队列名称,刚刚是123,那现在是321,点击确定。那其实是完成了两个订阅段,然后再发送一个叫做message Test 123的队列发布,可以看到已经提示消息是发成功的,就可以进到队列里面去看,他现在有的一些消息,搜一下,接收一下这条消息,看到这就是刚刚所发送的message test 123的一个消息。那同时再看一下321,在上面写的是可用消息,接受一下这个321也是,也是刚刚所发送的message test 123,那同时可用消息就会变成零,所以说这个case其实是告诉大家,逃避模型它其实是有那种类似于分发或者叫做略有的一个逻辑,它还可以把一条小企去路由到各个订阅者里面,这个就是现在的一个模型的一个主要的功能,还有包括它的特性。
那么接下来就可以看一下现在的一些练习sdk,怎么用sdk,会有什么配置项,还有包括一些功能,那首先给大家介绍一下现在mns的一些类似sdk的一些相关的一些资源,因为现在其实也主流支持了很多sdk,包括JAVA,Python,其实也是支持很多sdk,然后这里的话,主要还是演示一下用诺基s,去给大家去演示一下sdk的一些使用,同样,其实也是可以去直接调接口,就比方假如说qe的一个接口,然后去执行这些操作,也是可行的。
那现在就给大家去演示一下怎么去玩转 sdk,在仓库里面,直接在阿里云的仓库里面找到sdk的架包,然后直接安装,去演示一下。这里是一个之前做好的一个事例,然后就在这里演示,首先可以去直接把他的一个模块,下载到本地,这里提示已经下载过了,下完之后,它会生成一个模块,然后直接在里面去新建一个index ,他这里代码其实有几行,比较关键一点,这里讲解介绍一下第一行是什么,第一行是叫做basic,然后去声明一下,要去调s的这个架包,因为它其实是在阿里云的,可以直接映射,其次我们要声明一下台是什么,这一段其实就是声明修改成自己的。
第二块呢就是可能要去申请一下信息,其实就是现在的焦点的信息,焦点信息在这里有展示,就是每个创建队列的时候,其实都会有一个叫做点point,它其实就几部分构成,第一部分是ID。第二部分是类似于region的一些信息,比方说青岛,这样可能会也可以更直观一点,那这里其实就是现在的iPod的一个id,还有一个类似于我们到cn的一个后缀,那这两块的话,还有包括账号,账号是比较好拿到的,然后第二块的话就是可以直接在阿里控制台,会有一个类似于你来创建,还有包括访问的一个流程,就可以直接在这里去创建一个t,当然他会去验证现有的账号密码了,还有包括其他一些东西,然后就会生成一个在34k的一个value和包括的key值。这样可以直接在这里去填写出来,具体的一些情况其实就是现在主要的一些填写,这里有地址,已经告诉大家了,那就不去做演示,确实是非常简单的。这里其实是可以声明一个类似于client的一个客户端,然后就可以去调client的这样的一个类sdk。然后就是操作,就比方说这段代码,去创建了一个q,然后名称是q2,第二块呢就是现在可以去list一下q,q的值是多少,然后用jason去返回,第三段其实就是去一个我们的topic。第四段就是要去拿一下类似于就是信息以及要去推送到有一些类似于message,这样的话其实就可以完成,这块其实就是一个非常简单的,有一个cleaner的一个模型,假如大家感兴趣的话,可以在后面一节我们会有一个简单的一个实操课。
ex.js 2 () package.json
dex.js> ] client> accessKeyld
const MNSClient = require('@alicloud/mns');
const accountid ='182572xxxxx5';// 需要修改为自己的 AccountID
var client = new MNSClient(accountid, 《
region:‘cn-hangzhou',// 需要修改为指定region
accessKeyId:'LTAI5txxxx.//需要修改为AccountID对应的accessKeyId
accessKeySecret:‘UyHbwZL8ir6c5I4yhxxxxc',//需要修改为AccountID对应的accessKi// optional & default
secure:false, // use htt or http
internal: false, // use internal endpoint
lvpc:false // use vpc endpoint
(async function ()(
let res;
// create queue
res = await client.createQueue('test-queue2');
console.log(res);
// list queue
res = await client.listQueue();
console.log(JSON.stringify(res, null, 2));
// createtopic
res = await client.createTopic('test-topic');
console.log(res);
// get topic attributes
res awaitclient.getTopicAttributes('test-topic
LEMS 2 OUTPUT DEBUG CONSOLE TERMINAL JUPYTER zsh
engecanmeng-ali-worker test npm install @alicloud/mns -save
o date, audited 12 packages in 2s
10vulnerabilities
eng@canmeng-ali-worker test %1s
K.1s node modules package-lock.json package.json
engecanmeng-ali-worker test l
用的效果是怎样的,那其实现在就可以去跑一下,就比方说现在已经是装了那个环境,就比方说现在就可以直接跑一个类似于点击s,我们就可以发现它其实是有返回结果的,第一个结果是什么,第一个结果其实就是我们的create,create之后就是就是在我们这段代码,就是我们create的一个逻辑,create之后它会返回,我创建了一个类似于test,然后这个test的名称,location,然后他的地址在哪里,这个其实就是我们现在的一个返回值。然后第二个东西请求什么呢,我其实是请求一个q,然后q就会返回我现有的所有的body里面的一些q的内容,比方说可能有几个q,第一个q是我们的test,第二个q是什么test,第3q是什么test,这是刚刚去创建的q3s等等一系列。
JS index.js 2 l) package.json
JS index.is cfunction>
19 console.log(res);
20 // list queue
21 res = avait client.listQueue();
22 console.log(JSON.stringify(res, null, 2));
23 // create topic
24 res = await client.createTopic('test-topic');
25 console.loo(res):
PROBLEMS2 OUTPUT DEBUG CONSOLE TERMINAL JUPYTER zsh
up to date, audited 12 packages in 2s
found0 vulnerabilities
canmeng@canmeng-ali-worker-test s 1s
index.is node modules package-lock.json package.json
canmeng@canmeng-ali-worker test node index.js
code:204,
headers:
.c-hangzhou.al1yuncs.com/queues/test-queue2body:undefined
“code":200
"headers";
"body":[
"QueueName":"canmengtest",
“DelaySeconds": “65536"
“MaximumMessageSize":
"MessageRetentionPeriod":“345600"
“VisibilityTimeout":“30”
“CreateTime":“1648559194"
“LastModifyTime":"1648559194"
“PollingWaitSeconds";
“ActiveMessages":
“InactiveMessages":
“DelayMessages":
“QueueURL": "http://1825725063814405.mns.cn-hangzhou.aliyuncs.com/queues/canmengtest"“LoggingEnabled":"False"
"QueueName":"test"
"DelaySeconds":“0"
“MaximumMessageSize"“65536"
“MessageRetentionPeriod":“345600"
"VisibilityTimeout":"30"
"CreateTime":"1658149431"
这只是我们现在所有的的一个列表list出来,然后第三段其实创建了一个topic ,之后这块的返回值就是已经告诉你,已经创建完了,它的患者其实就是test,然后一个topic就是我们之前list的,然后第三段要去get一个信息,他也会出来,里面message的一个情况是什么,以及他的最大水平,最大水位以及我的创建时间等等一些信息,这块其实就是sdk去做的,然后第四个其实它会有一个报错,然后它的报错是什么,其实是没有找到topic name的一个message,所以说它是这块是失败的,这块失败原因是因为我们现在这块儿可能会去返回一个类似于失败者,所以说这里其实就是我们刚刚在控制台去演示了一个创建订阅的一个逻辑在那。
那现在的其实就是我们这些已经把我们现在的mns的sdk,确实是稍微去捋了一遍,我们大概也知道他mns的具体的流程是怎样,但是我这块是移动的mns,然后其实比方说其他语言,比方说我们的python,其实也是也是一个道理,给大家再去简单介绍一下我们python的sdk,就比方说用JAVA,但是JAVA可能现在是没有本地环境,所以说这块可能演示起来会比较烦一点,这块Python sdk其实也非常简单,sdk的话,我们直接用s code打开一下。
这也特别简单,会发现有几个点,第一个点是它的sample,就是create q的一些逻辑,第二个就是我们现在的一些mns的一些包,这种sdk的包,它里面可能会有一些类似于逻辑分装,这块其实是个类似sample,这类的话,我们其实可以直接把一些地址给填进去,比方说这套配可以展开,比方说可以直接把我们的ask的一些信息给填进去,填进去之后,它这里也是比较简单的,就比方说我要去publish一下,那这里可以直接去叫sample的一个接口,比方说我要运行发送,那就直接是Python,然后send message Python,比方说我这款就我掏一个名称,然后点个发送,它其实就可以发送了,这里其实会报错,是因为我们其实现在的类似于account一些数组,这些数据其实没有填,因为时间关系我这就不再填了,然后大家可以直接去看一下,我们现在其实使用了,包括我们的创建资源,其实都是非常清楚。
那其实就是我们这一节讲的一些内容,就是我们现在的一个控制台以及我们sdk工具的一个使用,这节课程那我们就先讲到这里,下面的话会有一个比较精彩的一个实践课,然后想进去告诉大家mns怎么去分装,怎么去用以及怎么去调用,以及怎么去接收我们的消息。