手把手系列:消息队列 MNS 实操讲|学习笔记

简介: 快速学习手把手系列:消息队列 MNS 实操讲

开发者学堂课程消息队列 MNS (RocketMQ 轻量版)入门课程手把手系列:消息队列 MNS 实操讲学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1236/detail/18411


手把手系列:消息队列 mns 实操讲解

 

内容介绍:

一、产品概述

二、模型

三、使用方式

 

一、产品概述

大家好,欢迎收看本次的一个实战课程,本次主要为大家去介绍mns的操作,还有包括它的相关演示,首先可以先去看一下mns到底是什么,以及它的主流的一些概念是什么,然后可以更方便的去理解和包括使用这款产品,在前面几个课程中也了解到,他其实是一个类似于的分布式的一个相应队列,它其实是有两个模型去组成的。

image.png


二、模型

第一个模型叫队列模型,叫做q第二个模型其实是我们的主题模型,叫做topic,所以说mns它主要的使用方式还有包括特性,其实也就是围绕这两个模型去展开。

image.png

那第一个就是比较经典的一个类似于1V1的消费,包括发送生产的一个模型,一端是生产者,另一端是消费者,然后每一条记录,只能被唯一的消费者所去做消费,就比方说我去发一个message等于12345,发下去,那就意味着下游端只有一个消费者可以接受到message等于12345的这条消息,这就是我们的简单队列模型,它是一个精简的1:1的一个模型。

image.png

第二个模型叫做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的一个模型,假如大家感兴趣的话,可以在后面一节我们会有一个简单的一个实操课。

image.png

 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打开一下。

image.png

这也特别简单,会发现有几个点,第一个点是它的sample,就是create q的一些逻辑,第二个就是我们现在的一些mns的一些包,这种sdk的包,它里面可能会有一些类似于逻辑分装这块其实是个类似sample,这类的话,我们其实可以直接把一些地址给填进去,比方说这套配可以展开,比方说可以直接把我们的ask的一些信息给填进去,填进去之后,它这里也是比较简单的,就比方说我要去publish一下,那这里可以直接去叫sample的一个接口,比方说我要运行发送,那就直接是Python,然后send message Python,比方说我这款就我掏一个名称,然后点个发送,它其实就可以发送了,这里其实会报错,是因为我们其实现在的类似于account一些数组,这些数据其实没有填,因为时间关系我这就不再填了,然后大家可以直接去看一下,我们现在其实使用了,包括我们的创建资源,其实都是非常清楚

那其实就是我们这一讲的一些内容,就是我们现在的一个控制台以及我们sdk工具的一个使用,这节课程那我们就先讲到这里,下面的话会有一个比较精彩的一个实践课,然后想进去告诉大家mns怎么去分装怎么去用以及怎么去调用以及怎么去接收我们的消息

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
22天前
|
消息中间件 网络性能优化 开发工具
消息队列 MQ使用问题之如何确保消息的唯一性
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 Java 测试技术
消息队列 MQ使用问题之数据流出规则是否支持平台的云RabbitMQ
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
1天前
|
消息中间件 存储 Java
【揭秘】RocketMQ内部运作大揭秘:一探究竟,原来消息队列是这样工作的!
【8月更文挑战第19天】RocketMQ是一款高性能、高可用的消息中间件,在分布式系统中至关重要。它采用发布/订阅模式,支持高吞吐量的消息传递。核心组件包括管理元数据的NameServer、存储消息的Broker以及Producer和Consumer。RocketMQ支持发布/订阅与点对点两种模型,并具备复杂的消息持久化和路由机制。通过Java API示例,可轻松实现消息的发送与接收。RocketMQ凭借其出色的特性和可靠性,成为大型分布式系统首选的消息解决方案。
11 5
|
8天前
|
消息中间件 存储 缓存
一个用过消息队列的人,竟不知为何要用 MQ?
一个用过消息队列的人,竟不知为何要用 MQ?
35 1
|
22天前
|
消息中间件 开发工具 RocketMQ
消息队列 MQ使用问题之一直连接master失败,是什么原因
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 Prometheus 监控
消息队列 MQ使用问题之如何将旧集群的store目录迁移到新集群
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 安全 PHP
消息队列 MQ使用问题之如何获取PHP客户端代码
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 API 开发工具
消息队列 MQ使用问题之如何开启RabbitMQ的MQTT功能
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。

热门文章

最新文章

相关产品

  • 轻量消息队列(原 MNS)
  • 云消息队列 MQ