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个 ...
随机推荐
- 3. React 组件生命周期介绍
React 中的每个组件都有三个阶段,这三个阶段构成了组件完整的生命周期.组件的生命周期为]); return; } this.setState({name: event.target ...
- 修改android应用包名
由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...
- 04 AutoCompleteTextView
作用:输入部分文字跳处下拉框列出相应的条目 <pre name="code" class="html"> <!-- 当文本框出现两个字符才开始 ...
- 发运模块中如何创建Debug 文件
版本11.5.9到12.x A. 针对发运事务处理或者快速发运产生Debug文件 注意:如果通过发运事务处理执行发放,请参考B部分,下面这部分销售订单发放是格外的设置和日志文件. 1. 每一 ...
- gradle编译自定义注解(annotation)的未解决问题
最近把一个用eclipse构建的项目,加上了Gradle脚本,用它来编译.虽然最后编译是显示BUILD SUCCESSFUL,但是在编译过程中,却打印出一大堆栈信息,似乎是在编译我自定义的注解时出现的 ...
- (NO.00004)iOS实现打砖块游戏(三):游戏主场景和砖块
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 制作墙体 首先在SpriteBuilder中新建Wall.ccb ...
- Hash冲突解决
hash的冲突不可避免的 1.开放地址法 开放地执法有一个公式:Hi=(H(key)+di) MOD m i=1,2,-,k(k<=m-1) 其中,m为哈希表的表长.di 是产生冲突的时候的增量 ...
- Android进阶(六)文件读操作
Android中文件的读写操作与Java中文件的读写操作是有区别的.在Java中,读文件操作如以下代码所示: public class FileRead { private static final ...
- UNIX环境高级编程——进程间通信概念
进程间通信 --- IPC1. 进程间通信的目的a. 数据传输: 一个进程需要将他的数据发送给另一个进程b. 资源共享: 多个进程之间共享同样的资源c. 通知事件: 一个进程需要向另一个或一组进程发送 ...
- Hadoop分布式存储系统HDFS
1.hadoop fs 指令 -ls -ls <路径> 查看指定路径的当前目录结构 -lsr -lsr <路径> 递归查看指定路径的目录结构 -du -du <路径> ...