js能订阅mq吗_测试工程师,必须了解的MQ知识!

238c10e9d90a74f18c2223e73bc4513a.gif

什么是消息中间件?通过提供某种规范实现在不同系统之间传递语义准确的消息。专注于数据的发送和接收,利用高效可靠的异步消息传递机制的集成分布式系统。什么是MQ?

MQ全称为Message Queue, 消息队列(MQ)是应用程序“对”应用程序的通信方法,也是消息中间件的一种。

MQ:生产者往消息队列中写消息,消费者可以读取队列中的消息。

消息队列的应用场景

a. 异步处理:比如订单状态处理完毕的回调通知;

b. 系统间应用解耦:前一个系统将要处理的内容放入消息队列,就不再关心后续的其他操作了,后面的系统获取消进行消费;

c. 流量削锋:避免因流量过大,导致流量暴增,海量消息堆积,应用挂掉;

d. 日志处理:通过队列进行日志处理;

e. 消息通讯:消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。

基本概念

651d073f4dbff1b9e4ea5571604337cb.png

1

消息模型

点对点模型(P2P):

在P2P模型中,有下列概念:消息队列(Queue)、发送者(Sender)、接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到它们被消费或超时。

·每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)。

·发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列。

·接收者在成功接收消息之后需向队列应答成功。

如果希望发送的每个消息都应该被成功处理的话,那么你需要P2P模型。

发布-订阅模型(Pub/Sub):

在Pub/Sub模型中,有下列概念:主题(Topic)、发布者(Publisher)、订阅者(Subscriber)。客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

·每个消息可以有多个消费者

·发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅之后,才能消费发布者的消息,而且,为了消费消息,订阅者必须保持运行的状态。

订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

如果希望发送的消息可以不被做任何处理、或者被一个消费者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。

2

交互原理

71ba5407bf38e386fbbb4af2f547e492.png

Nameserver做什么?

Namesrv是主要做路由服务(状态服务器),无状态可集群横向扩展。broker同时向多个Namesrv机器上报broker机器的实时状态信息、topic消息队列路由信息、broker基础信息、集群信息,从而达到数据热备份的作用。Producer发送消息的时候,先请求nanesrv获取topic路由信息,然后根据topic路由信息路由到broker(topic是存储在broker)。Consumer消费消息的时候同样先请求nanesrv获取topic路由信息,然后根据topic路由信息路由到broker。

Broker做什么?

消息中转角色,负责存储消息,转发消息。broker部署相对复杂,分为master和slave,一个master可以对应多个slave,但一个slave只能对应一个master(支持异步复制和半同步复制)。master可以集群部署,通过同样的ClusterName来区分,同一个集群中的BrokerName不能一样。每个broker与namesrv集群中的所有节点建立长连接,定时发送心跳信息(30秒),注册topic等信息到所有namesrv。

Producer

Producer 与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从Name Server 取Topic 路由信息,并向提供Topic 服务的Master 建立长连接,且定时向Master 发送心跳,Slave会同步Master的信息。Producer 完全无状态,可集群部署。

Consumer

Consumer与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从Name Server 取Topic 路由信息,并向提供Topic 服务的Master、Slave 建立长连接,且定时向Master、Slave 发送心跳。Consumer既可以从Master 订阅消息,也可以从Slave 订阅消息,订阅规则由Broker 配置决定。

Broker集群

一个Master下面可以挂载多个Slave,同一Master下的多个Slave通过指定不同的BrokerId来区分。

3

测试内容及问题排查方法

Q1:MQ是否能保证消息不重复?

1、绝大多数情况下,消息是不重复的。作为一款分布式消息中间件,在网络抖动、应用处理超时等异常情况下,无法保证消息不重复,但是能保证消息不丢失;

2、需要业务方自己实现去重逻辑,不推荐使用msgid来做去重,因为msgid在绝大部分情况下,是不会重复,不排除极端情况可能会出现重复,或者多个集群之间出现重复msgid;

3、可以使用订单编号等唯一的作为唯一标识来去重。

Q2:MQ未被消费、消息发送了,但是没有收到怎么查询?

MQ提供了多种消息查询方式:

1、使用Topic按时间范围进行查询,可以查询到一段时间内某Topic收到的所有消息;

2、使用Topic和MessageID对消息进行精准查询;

3、使用Topic和MessageKey较为精准地查询具有相同MessageKey的一类消息。

Q3:MQ消费失败如何重新消费消息?

1、消费业务逻辑代码如果返回ConsumeConcurrentlyStatus.RECONSUME_LATER,或者NULL,或者抛出异常,消息都会走重试流程,默认重试16次(重试次数可以自定义),如果重试16次后,仍然失败,则消息丢弃;

2、消息重试间隔可以通过context控制,如果不控制,会越来越长。

Q4:MQ消费失败、容器环境消息消费失败怎么排查?

1.、检查订阅关系是否正确,topic是否正确;

2、检查消费组状态是否正常;

sh[用户名]consumerConnection-n127.0.0.1:9876-g消费组名

sh[用户名]consumerProgress-n127.0.0.1:9876-g消费组名

3、检查生产者机器和消费者机器的地址解析是否为容器组mq地址;在docker管理平台,模板配置中进行配置及查看;

4、检查消费者服务器是否配置了外网地址,导致消息发送到基准环境;

5、确认生产者已生产消息。

Q5:简单的日志查询

通过MQ服务器上log日志,查询put及pull的记录。

Q6:MQ消费先于同步返回

一般采用加锁机制处理。

4

命名规范

Topic命名规范:

1、所有Topic必须使用T_开头,Topic中包含业务系统,可以唯一区分业务。

2、必须填写tag,同一Topic用不同的tag区分,全部大写。消费者通过Topic+tag消费消息。

3、使用运维平台查询Topic是否存在,存在需要考虑是否要更换Topic。

例:topic:T_LOAN_PRODUCT

tag:T_CANCEL_BORROW或T_SUBMIT_RESALE[topic+tag匹配消费消息]

消费组命名规范:

1、消费组必须以S_开头,包含业务系统,全部大写。同一Topic可以被多个消费组消费。

2、使用运维平台查询消费组是否存在,存在需要考虑是否要更换消费组。

例:c-group-id:S_PFD_T_ATM

生产组命名规范:

生产者必须使用P_开头,包含业务系统,全部大写,不同的系统禁止使用同一个组名。

例:p-group-id:P_PAYFUND

e1e4e231af3a657c0f17946c45cb2a31.gif

ff0ce502d13cba5bb1d679c403ed1254.png

链接:https://zhuanlan.zhihu.com/p/99616947

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除

推荐阅读

点击阅读☞从业多年测试工程师总结,大厂面试必问问题就是这些

点击阅读☞那些年!测试工程师面试时都遇到过哪些问题呢?

点击阅读☞中高级测试工程师面试题,助你一臂之力!

点击阅读☞涨薪失败,我是如何从3500加班狗做到测试开发工程师的?

点击阅读☞软件测试工程师面试如何做好自我介绍?

521c8bf2d1c89273a1a9b9d98c707d6d.gif

831f35d342d0f27037d78111d443fba4.png

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

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

相关文章

98k计算机版教程,绝地求生正式版八倍镜98k瞄准教程 新版98K怎么用?

《绝地求生大逃杀》正式版已经更新,新版本中官方对原有的四倍镜和八倍镜进行了不小的改动。正式版98K怎么用?接下来就为大家带来新版八倍镜98k瞄准教程,感兴趣的玩家一起来看看吧!教程:新版本的八倍镜更新了新的瞄准样…

python 图 鼠标 显示_在matplotlib图形窗口(带imshow)中,如何删除、隐藏或重新定义鼠标的显示位置?...

是的,你可以。但比你想象的要难。您看到的鼠标跟踪标签是根据鼠标跟踪调用matplotlib.axes.axes.format_coord生成的。您必须创建自己的Axes类(重写format_coord以执行您希望它执行的操作),然后指示matplotlib使用它来代替默认的Axes类。具体来说&#x…

转:修改Content Server管理员密码 - [Documentum 实施开发记录]

修改Content Server管理员密码 - [Documentum 实施开发记录] 2010-02-25 Tag:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://fanlb.blogbus.com/logs/59357766.html修改documentum content server 管理员用户dmadmin的密码 (…

同等学力申硕计算机科学与技术参考书,2017同等学力申硕计算机科学与技术综合备考规划...

2017同等学力申硕计算机科学与技术综合备考规划,详情如下一、复习时间:现在开始至2017年5月(考试前)二、复习科目:计算机科学与技术三、复习计划:第一个阶段 (现在--2016.12)整体把握大纲结构,通读大纲,先把…

一家很好的iPhone应用程序开发公司——易标科技

上海etagmedia易标科技——iPhone应用程序开发公司 作为一个最高效、最专业的iPhone应用程序开发公司、上海etagmedia易标科技有优秀的iPhone应用程序开发团队。有在iPhone应用程序开发行业从业多年的iPhone应用程序开发团队,领导开发的iPhone应用程序长居AppleStor…

exar 带容隔离_带有美白功效的6款隔离霜 美白隔离两不误

原标题:带有美白功效的6款隔离霜 美白隔离两不误隔离乳已经成为了护肤和化妆环节不可或缺的一步。它兼具的功效也越来越多,从最基本的隔离防护,到打底、遮瑕,现在大受欢迎的隔离产品又能兼顾提亮肤色的功能。用隔离乳来实现“美白…

HTML中的function函数命名,请问HTML function函数怎么定义和调用?

/*javascript定义函数(声明函数)可以有三种方法:正常方法、构造函数、函数直接量。*//*1.正常方法 function(param){}*/function print(msg){document.write(msg,"");}/*如果函数不包含return 语句,只执行函数体内语句,并返回undef…

csv中包含多余换行符_Python3爬虫之猫眼电影TOP100(requests、lxml、Xpath、CSV)

点击关注,我们共同每天进步一点点!【1x00】循环爬取网页模块观察猫眼电影TOP100榜,请求地址为:https://maoyan.com/board/4每页展示10条电影信息,翻页观察 url 变化:第一页:https://maoyan.com/…

创新品类,N次方的市场爆炸力

一、品类的诱惑力 可乐:一种碳酸饮料;营养快线:一种牛奶果汁;饮养高层:一种高端饮养品;防电墙热水器:一种有安全装置的电热水器;香飘飘:一种可以即冲泡饮的杯装奶茶……这…

计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年、人才过剩,而对于企业HR来说永远都招不到称心如意的人才。这个怪圈在“计蒜客”创始人俞昊然看来,主要是因为当今高校的教学资源太过陈旧,没有跟上业内发展的需求&#…

容器宿主机数据库_解决Docker容器内访问宿主机MySQL数据库服务器的问题

懒得描述太多,总归是解决了问题,方法简要记录如下,虽然简要,但是完整,一来纪念处理该问题耗费的大半天时间,二来本着共享精神帮助其他遇到该问题的哥们儿,当然这个方法并不一定能解决你们的问题,但是多少能提供些解决思路.第一,先检查防火墙,通常应该没什么问题(问题解决之后我…

郓城天气预报软件测试,郓城天气预报15天

发送给QQ好友★郓城未来15天天气预报★郓城天气预报7月22日 星期四:阴转小雨,24C~29C东风,3-4级转小于3级郓城天气预报7月23日 星期五:阴转多云,24C~31C东风,小于3级郓城天气预报7月24日 星期六:晴转多云,24C~32C东风&…

服务器角色与数据库角色

http://hi.baidu.com/240728057/blog/item/dd28eb0f4510ec2d6159f332.htmlhttp://topic.csdn.net/t/20030821/14/2172932.html 更改数据库登陆密码 权限:sysadmin创建数据库和修改数据库 权限:dbcreator 固定服务器角色 描述 sysadmin 在 SQL Server 中…

数据挖掘肿瘤预测_Nature Medicine封面文章:利用单核细胞数量预测及评估肿瘤免疫治疗效果...

免疫检查点阻断已经彻底改变了癌症治疗,临床实验数据表明PD-1、PD-L1抗体的免疫治疗可以有效应对转移性黑色素瘤和多种其他类型的癌症。尽管无进展生存期显着增加,临床治疗结果也呈现很大的个体差异,只有一小部分患者对药物表现出持久的反应&…

百善计算机学习,党建引领学做合一,志愿服务助力乡村振兴——计算机工程学院开展“百善孝为先”主题宣传文化墙墙绘涂鸦活动...

为充分发挥党员的先锋模范作用和当代大学生学做合一的品质,用实际行动助力乡村振兴,2019年5月18日,计算机工程学院党员服务站组织学生党员及第57期党校积极分子赴郫都区郫筒街道长乐村开展“百善孝为先”主题宣传文化墙墙绘涂鸦活动,为乡村振…

mysql 天数减1_mysql 日期操作 增减天数、时间转换、时间戳(转换)

MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。select datediff(2008-08-08, 2008-08-01); -- 7select datediff(2008-08-01, 2008-08-08); -- -7一、MySQL 获得当前日期时间 函数1.1 获得当前日期时间(date time)函数&#xff1a…

tcp 测试软件,ztcp

软件简介ztcp 是一个发送 TCP 命令的工具,本项目采用 go 语言编写,提供一个 tcp 客户端,专门用作各种 socket 测试,HTTP 测试。尤其是对AJAX 请求很便利的支持。安装检查依赖库本项目依赖zgo : 需要它提供的一些便利函数iconv-go …

使用BizTalk Server常见问题处理

在开始开发BizTalk项目的时候,一些开发者会碰到许多基础问题,本文对这些常见问题进行罗列,其中有个别问题笔者向微软的BizTalk工程师寻求了问题解决方案,旨在让使用BizTalk的朋友更快的进行开发。文中的内容基于BizTalk Server 20…

python数据存储用什么_Python的小数据存储,用什么格式更有逼格?

小数据存储我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储。但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何存储…

电气与计算机学院院长论坛报告,自动化学院分论坛第十、十一次专家报告会圆满成功...

2016年10月24日下午两点半,第十三届北航研究生学术论坛自动化学院分论坛第十、十一次专家报告会在新主楼D座639举行。本次报告会由自动化学院的董希旺老师邀请到了加拿大维多利亚大学电子与计算机工程系副研究员何建平博士和加拿大阿尔伯塔大学电气与计算机工程系的…