队列的两种存储方式对比

队列的两种存储方式对比,第1张

队列的两种存储方式分为消息投递实时性:使用短轮询方式,实时性取决于轮询间隔时间:使用长轮询,同写入实时性一致,消息的写入延时通常在几个毫秒。总结:短轮询:周期性的向服务提供方发起请求,获取数据优点:前后端程序编写比较容易。缺点:请求中有大半是无用,难于维护,浪费带宽和服务器资源;响应的结果没有顺序(因为是异步请求,当发送的请求没有返回结果的时候,后面的请求又被发送。而此时如果后面的请求比前面的请 求要先返回结果,那么当前面的请求返回结果数据时已经是过时无效的数据了)。长轮询:客户端向服务器发送请求,服务器接到请求后保持住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。优点:在无消息的情况下不会频繁的请求,耗费资源小。缺点:服务器hold连接会消耗资源,难于管理维护。消费失败重试Kafka:消费失败不支持重试RocketMQ:消费失败支持定时重试,每次重试间隔时间顺延总结:kafka也可以通过编写代码来实现写入和消费失败的重试机制,这种要求需要用户来编写代码实现,kafka只是提供了这种方式,但并不是他推荐的使用方式,他的设计模式上只是兼顾了这种情况,并不是重点。RocketMQ在设计上就考虑了这种情况,在提供的官方api中提供了重试的设置,用户可以选择多种模式的重试机制,以及自定义的重试逻辑,简单场景下用户只用设置一下参数即可。关于需要重试的场景例如充值类应用,当前时刻调用运营商网关,充值失败,可能是对方压力过多,稍后在调用就会成功,如支付宝到银行扣款也是类似需求。这里的重试需要可靠的重试,即失败重试的消息不因为Consumer宕机导致丢失。

1、队列管理器需要定义一个用于连接队列管理器的服务器连接通道。与53版本不同的是,这个通道不一定是SYSTEMADMINSVRCONN。该通道的名字可以随意定义,在设置远程管理的时候在 WebSphere MQ 资源管理器中指定即可。需要注意的是,启动WebSphere MQ 资源管理器的机器上的当前用户可能没有访问队列管理器对象的权限,导致 MQ 资源管理器无法管理远程队列管理器。简单的方法是在定义服务器连接通道的时候设置该通道的 MCAUSER 属性为mqm组中的用户。
DEFINE CHANNEL(SYSTEMADMINSVRCONN) CHLTYPE(SVRCONN) TRPTYPE(TCP) MCAUSER(单引号mqm单引号)
(郁闷啊,单引号居然会被转掉,记住上面要用单引号)
2、队列管理器需要定义一个名为 SYSTEMMQEXPLORERREPLYMODEL 的临时模型队列以和MQ 资源管理器通信:
DEFINE QM(SYSTEMMQEXPLORERREPLYMODEL) DEFTYPE(TEMPDYN)
3、队列管理器需要启动命令服务器
strmqcsv <QMNAME>
4、队列管理器需要启动侦听:
DEFINE LISTENER(TCPLSTENER) TRPTYPE(TCP) PORT(1414)
START LISTENER(TCPLISTENER)
如果远程队列管理器是在Windows下用图形界面建立的,则1、2、3步都已经默认做好了。只需要做第4步即可
完成以上步骤后,就可以在 MQ 资源管理器中按照下面步骤连接队列管理器:
1、打开 WebSphere MQ 资源管理器;右键点击队列管理器导航器中的队列管理器文件夹,选择“显示/隐藏队列管理器”:
2、在d出的“显示/隐藏队列管理器”对话框中选择“添加”按钮:
3、在“添加队列管理器”对话框中选择直接连接,并输入队列管理器名称(一定要和远程队列管理器名称一致),然后点击下一步:
4、填入主机名或 IP 地址、队列管理器侦听端口、以及服务器连接通道,然后点击完成即可。
间接接连接设置步骤
WebSphere MQ 资源管理器不但可以通过直接连接管理远程队列管理器,还可以通过队列管理器间接管理一个队列管理器。其基本原理为:作为间接队列管理器的队列管理能将消息路由自动到目标队列管理器。其设置方法如下:
仍然延续前面的例子,我们将实现MQ 资源管理器对与 ERPQM1 在同一台机器的另外一个队列管理器 ERPQM2 的远程管理。
1、在队列管理器 ERPQM2 上进行如下设置:
/ 定义/启动侦听 /
DEF LISTENER(TCPLISTENER) TRPTYPE(TCP) PORT(1415)
START LISTENTER(TCPLISTENER)
/ 定义与ERPQM1 同名的传输队列 /
DEF QL(ERPQM1) USAGE(XMITQ) TRIGGER TRIGTYPE(FIRST) INITQ(SYSTEMCHANNELINITQ) TRIGDATA(QM2TOQM1)
/ 定义ERPQM2 到 ERPQM1 的发送通道/
DEF CHANNEL(QM2TOQM1) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME(9181159231) XMITQ(ERPQM1)
/ 定义ERPQM1 到 ERPQM2 的接收通道/
DEF CHANNEL(QM1TOQM2) CHLTYPE(RCVR) TRPTYPE(TCP)
2、在队列管理器 ERPQM1 上进行如下设置:
/ 定义与目标队列管理器同名的传输队列 /
DEF QL(ERPQM2) USAGE(XMITQ) TRIGGER TRIGTYPE(FIRST) INITQ(SYSTEMCHANNELINITQ) TRIGDATA(QM1TOQM2)
/ 定义ERPQM1 到 ERPQM2 的发送通道/
DEF CHANNEL(QM1TOQM2) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('9181159231(1415)') XMITQ(ERPQM2)
/ 定义ERPQM1 到 ERPQM2 的接收通道/
DEF CHANNEL(QM2TOQM1) CHLTYPE(RCVR) TRPTYPE(TCP)
3、启动队列管理器 ERPQM2 的命令服务器:
strmqcsv ERPQM2
配置远程管理:
1、打开 WebSphere MQ 资源管理器;右键点击队列管理器导航器中的队列管理器文件夹,选择“显示/隐藏队列管理器”:
2、在d出的“显示/隐藏队列管理器”对话框中选择“添加”按钮:
3、在“添加队列管理器”对话框中选择“使用中间队列管理器进行连接”,并输入队列管理器名称,然后点击下一步:
4、在中间队列管理器下拉选项中选择 ERPQM1 点击完成即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10890991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存