MQ级联方式使用场景
使用场景:
如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介。上图中,Application1与Application2通信不进行直接连接,而是通过与MQ通信从而实现二者的通信。图中两个MQ的信息如上描述。其中RemoteQueue为远程队列,该队列指定了目标端对应的队列为Queue,并且该远程队列指定了传输所使用的传输队列尾TransQueue;而此传输队列TransQueue与发送通道CHAN_QMGR1_TO_QMGR2相关联,并且可以在该传输队列上设置触发器。Application1连接通过CHAN_SERVER_CON服务器连接通道连接MQ,将消息放入RemoteQueue远程队列,MQ的远程队列收到放入的消息后将消息放入与之关联的传输队列,传输队列中有消息后么,触发器会产生触发消息,通过发送通道将该条消息发送到目标端。此处需要注意的是,在发送通道中会指定目标端的ip和端口号,并且发送通道的名称需要与目标端接收通道的名称一致,即一个发送通道要对应目标端的一个接收通道,并且名称相同。如此消息便发到了MQ2的接收通道中,MQ2拿到消息后,该消息描述了它的目标点是Queue队列,则MQ2会将消息放入MQ2的Queue本地队列中去。
MQ级联方式的搭建,左边的MQ队列管理器名称叫做MQ1,右边的叫做MQ2:
MQ1的搭建:
1.创建队列管理器MQ1。(使用mqm用户连接MQ所在的机器,dspmq查看队列的状态,查看MQ1是否已经创建,如果已经创建则更换名称,或者删掉重建)
mqm@localhos ~>$crtmqm MQ1
2.启动队列管理器
mqm@localhos ~>$strmqmMQ1
3.进入MQ1的命令行模式
mqm@localhos ~>$runmqsc MQ1
4.定义本地队列Queue,下面的含义不再赘述参见本章的上一节。
DEFINE QLOCAL ('Queue') DEFPSIST (YES) MAXDEPTH(100) REPLACE
5.定义一个远程队列RemoteQueue
DEFINE QREMOTE('RemoteQueue') RNAME('Queue') RQMNAME('MQ2') XMITQ('TransQueue')
RNAME('Queue') 指定了对应的目标端的队列是Queue,RQMNAME('MQ2')指定了目标端的队列管理器名称为MQ2, XMITQ('TransQueue')指定了该远程队列关联的传输队列为‘TransQueue’。
6.定义一个传输队列TransQueue
DEFINE QLOCAL('TransQueue') usage(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR1_TO_QMGR2') TRIGTYPE(FIRST) TRIGGER REPLACE
与本地队列不同的是 usage(XMITQ) ,它指定了该队列为传输队列。DEFPSIST(YES)代表队列持久化, INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR1_TO_QMGR2') TRIGTYPE(FIRST) TRIGGER 与设置触发器相关,初始化队列为SYSTEM.CHANNEL.INITQ,被触发的通道为'CHAN_QMGR1_TO_QMGR2',触发方式为First,每个消息到达时产生触发事件。
7.定义一个发送通道CHAN_QMGR1_TO_QMGR2
DEFINE CHANNEL('CHAN_QMGR1_TO_QMGR2') CHLTYPE(SDR) CONNAME('192.168.xx.xx(1414)') XMITQ('TransQueue')
CONNAME指定了目标端ip和端口号,CHLTYPE(SDR)指定了通道的类型为发送,XMITQ指定了传输队列的名称。
8.定义一个接收通道CHAN_QMGR2_TO_QMGR1,该名称与发送端的发送通道名称一致。
DEFINE CHANNEL(CHAN_QMGR2_TO_QMGR1) CHLTYPE(RCVR)
9.定义一个服务器连接通道
DEFINE CHANNEL(CHAN_SERVER_CON) CHLTYPE(SVRCONN) REPLACE
10.在定义一个死性队列QDEAD
DEFINE QLOCAL ('QDEAD') DEFPSIST (YES) MAXDEPTH(100) REPLACE
11.给MQ1设置指定的死性队列,当消息无法到达指定的Queue中时,会被放入死性队列QDEAD
ALTER QMGR DEADQ(‘QDEAD’)
12.定义监听器LISTENER.TCP,该端口1414应用程序连接时需要指定。
DEFINE LISTENER('LISTENER.TCP') TRPTYPE(TCP) CONTROL(QMGR) PORT(4141) REPLACE
13.启动监听器LISTENER.TCP
START LISTENER('LISTENER.TCP')
如此发送的一方就搭建完了。
MQ2的搭建:
1.创建队列管理器MQ2。(使用mqm用户连接MQ所在的机器,dspmq查看队列的状态,查看MQ2是否已经创建,如果已经创建则更换名称,或者删掉重建)
mqm@localhos ~>$crtmqm MQ2
2.启动队列管理器
mqm@localhos ~>$strmqm MQ2
3.进入MQ2的命令行模式
mqm@localhos ~>$runmqsc MQ2
4.定义本地队列Queue,下面的含义不再赘述参见本章的上一节。
DEFINE QLOCAL ('Queue') DEFPSIST (YES) MAXDEPTH(100) REPLACE
5.定义一个远程队列RemoteQueue
DEFINE QREMOTE('RemoteQueue') RNAME('Queue') RQMNAME('MQ1') XMITQ('TransQueue')
RNAME('Queue') 指定了对应的目标端的队列是Queue,RQMNAME('MQ1')指定了目标端的队列管理器名称为MQ1, XMITQ('TransQueue')指定了该远程队列关联的传输队列为‘TransQueue’。
6.定义一个传输队列TransQueue
DEFINE QLOCAL('TransQueue') usage(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR2_TO_QMGR1') TRIGTYPE(FIRST) TRIGGER REPLACE
与本地队列不同的是 usage(XMITQ) ,它指定了该队列为传输队列。DEFPSIST(YES)代表队列持久化, INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA('CHAN_QMGR2_TO_QMGR1') TRIGTYPE(FIRST) TRIGGER 与设置触发器相关,初始化队列为SYSTEM.CHANNEL.INITQ,被触发的通道为'CHAN_QMGR2_TO_QMGR1',触发方式为First,每个消息到达时产生触发事件。
7.定义一个发送通道CHAN_QMGR2_TO_QMGR1
DEFINE CHANNEL('CHAN_QMGR2_TO_QMGR1') CHLTYPE(SDR) CONNAME('192.168.xx.xx(4141)') XMITQ('TransQueue')
CONNAME指定了目标端ip和端口号,CHLTYPE(SDR)指定了通道的类型为发送,XMITQ指定了传输队列的名称。
8.定义一个接收通道CHAN_QMGR1_TO_QMGR2,该名称与发送端的发送通道名称一致。
DEFINE CHANNEL(CHAN_QMGR1_TO_QMGR2) CHLTYPE(RCVR)
9.定义一个服务器连接通道
DEFINE CHANNEL(CHAN_SERVER_CON) CHLTYPE(SVRCONN) REPLACE
10.在定义一个死性队列QDEAD
DEFINE QLOCAL ('QDEAD') DEFPSIST (YES) MAXDEPTH(100) REPLACE
11.给MQ1设置指定的死性队列,当消息无法到达指定的Queue中时,会被放入死性队列QDEAD
ALTER QMGR DEADQ(‘QDEAD’)
12.定义监听器LISTENER.TCP,该端口1414应用程序连接时需要指定。
DEFINE LISTENER('LISTENER.TCP') TRPTYPE(TCP) CONTROL(QMGR) PORT(1414) REPLACE
13.启动监听器LISTENER.TCP
START LISTENER('LISTENER.TCP')
这样就完成了MQ1与MQ2的互相通信了,需要注意的是,此处两个队列管理器的监听端口不能一样。
小结:此种连接方式适用于小批量消息的发送及接收,即单个队列管理器便能满足需求。此外这种方式是将队列管理器与远程队列进行了绑定,不便于扩展。
- MQ队列管理器搭建(三)
MQ集群及网关队列管理器的搭建 描述: 如上图所示,为MQ的集群搭建部署图.CLUSTERA.CLUSTERB分别是两个集群,其中Qm1-Qm3.GateWayA为CLUSTERA集群中的队列 ...
- MQ队列管理器搭建(一)
多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求. Applicat ...
- mq队列管理器命令
dspmq: 队列管理器显示 QMCIPSA-------队列管理器 runmqsc QMSAA 运行查找Q队列名 运行MQ命令 runmqsc QmgrName 如果是默认队列管理器,可以不带其名 ...
- com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器“zm_queue_manager”提供的安全性认证无效, ...
- kubernetes-helm程序包管理器(二十)
helm概述 Helm是Kubernetes的包管理器,Helm 让我们能够像 yum 管理 rpm 包那样安装.部署.升级和删除容器化应用. Helm的核心术语: Chart:一个helm程序包,是 ...
- jmeter性能工具 之 cookie 管理器 (二)
上一篇主要介绍了jmeter 的基本使用方法,编写了登陆脚本,这一篇在登陆基础上,进行充值操作. 问:什么时候需要用到cookied 管理器? 答:需要登陆信息时,如果充值,提现,淘宝的下单,添加到购 ...
- android中常用的布局管理器(二)
接上篇博客 (3)LinearLayout 线性布局管理器 线性布局管理器是将放入其中的组件按照垂直或水平方向来布局,每一行或每一列只能放一个组件,并且不会换行,当组件排列到窗体的边缘后,后面 ...
- Jmeter接口测试实战之HTTP Cookie管理器(十二 )
在使用测试工具Jmeter做接口测试中,怎么记录下它登录成功后的信息,在接口测试的应用场景中,一般对业务的操作都是基于用户登录情况下的操作.它的测试步骤相对来说很简单的,其实在Jmeter的测试工具中 ...
- MQ队列管理
分享一段代码,很实用. 下面这段java代码是我在国外一个论坛上发现的,源地址已经忘了.代码的作用是可以删除正在使用的mq的队列消息,管理mq的人一定知道它的美妙了吧,哈哈. 我拿来改了下,增加了2个 ...
随机推荐
- 1、Android测试入门
编写和运行测试时Android APP开发周期中的重要的一环.好的测试可以让你非常容易的在开发过程中发现bug,提升你对自己代码的自信.使用Android Studio,你可以在物理设备或者虚拟机中运 ...
- [java面试]javascript中dom取值问题radio名字一样归属于同一个组,求点击的是哪一个
题目描述: 看如下的html文件,里面定义了一些radio类型的元素,请完成parse()函数的内容,要求能够弹出对话框提示当前选中的是第几个单选框. </pre><pre code ...
- Java --Annotation学习心得体会及笔记
相对于注释这种给程序员看的信息: 注解,就是给程序看的解释性的语言,其作用就相当于配置文件的存在.其存在的意义在于以下几点: 优点: 方便的使程序员看到相关项的关联位置及关联方式等信息. 缺点: 由于 ...
- SDL2源代码分析3:渲染器(SDL_Renderer)
===================================================== SDL源代码分析系列文章列表: SDL2源代码分析1:初始化(SDL_Init()) SDL ...
- C++之多态性与虚函数
面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了&quo ...
- cocos2d-js(一)引擎的工作原理和文件的调用顺序
Cocos2d-js可以实现在网页上运行高性能的2D游戏,实现原理是通过HTML5的canvas标签,该引擎采用Javascript编写,并且有自己的一些语法,因为没有成熟的IDE,一般建立工程是通过 ...
- hibernate 关于主键
本文为北京尚学堂hibernate视频的学习笔记 1在xml中定义单个主键生成策略 1.1通过xml <id name="id" type="long" ...
- [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
写在前面 最近在从零开始写一个移动端的AR系统,坑实在是太多了!!!整个项目使用了OpenCV第三方库,但对于摄像机来说,和原生Camera的方法基本相同. 实现 以OpenCV的JavaCamera ...
- GDAL库中WFS服务中含有中文不能获取数据的问题
GDAL库中目前提供了对WFS服务发布的数据进行获取,目前发现对于中文的服务名称或者图层名为中文,GDAL不能正确识别.通过调试发现,其原因有下面两点: 1.输入的URL路径没有使用UTF8编码而从网 ...
- 05_学生管理系统,xml读写,布局的综合应用
最终要做的项目目标: 2.编写Android清单文件AndroidManifest.xml <?xml version="1.0" encoding="utf ...