MQ队列管理器—双向通道的创建
基于公有云的RabbitMQ双向数据同步方案
基于公有云的RabbitMQ双向数据同步方案一、测试环境阿里云MQ:172.16.130.204(master) / 172.16.128.63(slave)微软云MQ:172.16.192.9(master) / 172.16.192.28(slave)同步组件:RabbitMQ federation-upstream同步方式:双向同步二、方案目标及介绍验证基于不同公有云的数据中心,支持MQ消息队列的业务数据同步方案。
下面配置按先后顺序,分别在阿里云MQ节点和微软云MQ节点进行配置,完成后实现两地消息生产者产生消息会在本地留存一份,并立即转发到对端(各自上游MQ节点),使两地消费者可以及时读取全部消息。
三、阿里云MQ1.创建federation-upstreamURL:amqp://admin:************.192.9(定义上游为微软云香港MQ节点)Reconnect Delay:5sAck mode:on-confirm目的是将上游的微软云香港MQ节点收到的信息,推送到当前MQ节点(下游)。
2.创建exchange3.创建queue4.绑定exchange、queue5.创建policy这条策略是为了在当前阿里云MQ,匹配所有以dual开头的exchange、queue,按federation-upstream定义执行。
策略配置完成即生效,Federation会自动在上游微软云MQ节点完成下列操作:a.创建同名交换器dual.exchangeb.创建federation类型交换器:federation: dual.exchange -> rabbit@iz2zegotcocceakkehlbi3z Bc.创建同名队列dual.queued.创建federation类型队列:federation: dual.exchange -> rabbit@iz2zegotcocceakkehlbi3ze.绑定dual.exchange和federation类型交换器f.绑定federation类型交换器和federation类型队列g.配置federation类型队列的消费者:阿里云MQ节点6.检查连接状态阿里云端MQ的federation中,同步策略运行正常微软云香港MQ的connections中,阿里云MQ服务器已连接成功。
MQ本机实现两个队列管理器消息传递
MQ本机实现两个队列管理器消息传递之一2010年09月07日14:02 来源:百度空间作者:javashmily 编辑:李倩评论:0条本文Tag:IBM Websphere【IT168 技术】首先在IBM WebSphere MQ资源管理器中建立“队列管理器”、“队列”、“通道”等然后编写程序实现把消息put到队列中,再get出来。
1、创建发送端的队列管理器send2、创建发送方的本地队列Q1注意:用法要改成“传输”3、创建远程队列Q2远程队列:Q2远程队列管理器:recieve ,下面我会创建名称为recieve 的队列管理器传输队列:Q14、创建“发送方通道”名称为“C.TO.S“注意:连接名称写目的地的IP 因为我在本机做测试,所以用127.0.0.1 ,1416为远程队列管理器的port5、创建“服务器连接通道”名称为CLIENT6、创建“远程队列管理”名称为recieve(接收方)7、创建接收方的本地队列 Q2 注意Q2要和发送方的远程队列名字相同8、创建“接收方通道”名称要与发送方的发送通道相同。
为“C.TO.S”9、创建接收方的“服务器连接通道”名称为"SERVER"10、想远程队列中放入一个测试消息,在接收方的本地队列中浏览消息,若能看到则成功。
MQ本机实现两个队列管理器消息传递之二2010年09月07日14:21 来源:百度空间作者:javashmily 编辑:李倩评论:0条本文Tag:IBM Websphere Java【IT168 技术】在《MQ本机实现两个队列管理器消息传递之一》当中,描述了如何对队列进行队列和配置,本片将放出一段完整的Java代码以供大家参考。
1import java.io.EOFException;2import java.io.IOException;34import com.ibm.mq.MQC;5import com.ibm.mq.MQEnvironment;6import com.ibm.mq.MQException;7import com.ibm.mq.MQGetMessageOptions;8import com.ibm.mq.MQMessage;9import com.ibm.mq.MQPutMessageOptions;10import com.ibm.mq.MQQueue;11import com.ibm.mq.MQQueueManager;1213public class Test {1415/**16* @param args17*/18public static void main(String args[]) {19 Test t = new Test();20 t.putMsg();21 t.getMsg();22 }2324private MQQueue mqQueue;25private MQQueueManager qMgr = null;26public void getMsg() {27// 接收方主机名28 String hostName = "192.168.0.16";29// 接收方服务器连接通道30 String channel = "SERVER";31// 接收方队列名称32 String qManager = "recieve";33// 接收方接收的本地队列34 String qName = "Q2";35 MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPO RT_MQSERIES);36 SID = 1381;37 MQEnvironment.hostname = hostName;38 MQEnvironment.channel = channel;39 MQEnvironment.port = 1416;40try {41 qMgr = new MQQueueManager(qManager);42 System.out.println("成功连接QueueManager");43int openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUI ESCING;44 mqQueue = qMgr.accessQueue(qName, openOptions);45 MQGetMessageOptions gmo = new MQGetMessageOptions();46 gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;47 gmo.options = gmo.options + MQC.MQGMO_WAIT;48 gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;49 gmo.waitInterval = 3000;50 MQMessage inMsg = new MQMessage();51 mqQueue.get(inMsg, gmo);52 String msg = inMsg.readString(inMsg.getMessageLength());53 System.out.println("this message is " + msg);54 mit();55 } catch (EOFException e) {56 e.printStackTrace();57 } catch (MQException e) {58 e.printStackTrace();59 } catch (IOException e) {60 e.printStackTrace();61 } finally {62try {63if (mqQueue != null) {64 mqQueue.close();65 System.out.println("成功关闭Queue");66 }67if (qMgr != null) {68 qMgr.close();69 qMgr.disconnect();70 System.out.println("成功关闭、断开QueueManager");71 }72 } catch (MQException ex) {73 }74 }75 }767778public void putMsg() {79 MQQueueManager qMgr = null;80try {81// 源方主机名82 String hostName = "192.168.0.16";83// 源方服务器连接通道84 String channel = "CLIENT";85// 源方队列管理器86 String qManager = "send";87// 远程队列管理器定义远程队列管理器为recieve ,远程队列为Q288 String qName = "Q2";89 MQEnvironment.hostname = hostName;90 MQEnvironment.channel = channel;91 SID = 1381;92 MQEnvironment.port=1415;93 MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSP ORT_MQSERIES);94 MQEnvironment.disableTracing();95 MQException.log = null;96// 连接到队列管理器97 qMgr = new MQQueueManager(qManager);98 System.out.println("成功连接QueueManager");99int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING; 100 mqQueue = qMgr.accessQueue(qName, openOptions);101 MQPutMessageOptions mpmo = new MQPutMessageOptions();102 MQMessage mqMessage = new MQMessage();103 mqMessage.writeString(new java.util.Date().toString());104 mqQueue.put(mqMessage, mpmo);105 } catch (MQException ex) {106 System.out.println("Error Code : " + ex.reasonCode);107 ex.printStackTrace();108 } catch (java.io.IOException ex) {109 ex.printStackTrace();110 } finally {111try {112if (mqQueue != null) {113 mqQueue.close();114 System.out.println("成功关闭Queue");115 }116if (qMgr != null) {117 qMgr.close();118 qMgr.disconnect();119 System.out.println("成功关闭、断开QueueManager"); 120 }121 } catch (MQException ex) {122 }123 }124 }125 }。
IBM MQ
MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel)。
其基本的操作方法如下:创建队列管理器crtmqm –q QMgrName-q是指创建缺省的队列管理器删除队列管理器dltmqm QmgrName启动队列管理器strmqm QmgrName如果是启动默认的队列管理器,可以不带其名字停止队列管理器endmqm QmgrName 受控停止endmqm –i QmgrName 立即停止endmqm –p QmgrName 强制停止显示队列管理器dspmq –m QmgrName运行MQSeries命令runmqsc QmgrName如果是默认队列管理器,可以不带其名字往队列中放消息amqsput QName QmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字从队列中取出消息amqsget QName QmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字启动通道runmqchl –c ChlName –m QmgrName启动侦听runmqlsr –t TYPE –p PORT –m QMgrName停止侦听endmqlsr -m QmgrNameMQSeries命令定义死信队列DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE设定队列管理器的死信队列ALTER QMGR DEADQ(QNAME)定义本地队列DEFINE QL(QNAME) REPLACE定义别名队列DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)远程队列定义DEFINE QREMOTE(QRNAME) +RNAME(AAA) RQMNAME(QMGRNAME) +XMITQ(QTNAME)定义模型队列DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)定义本地传输队列DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +INITQ(SYSTEM.CHANNEL.INITQ)+PROCESS(PROCESSNAME) REPLACE创建进程定义DEFINE PROCESS(PRONAME) +DESCR(‘STRING’)+APPLTYPE(WINDOWSNT)+APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等创建发送方通道DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR 和CLUSRCVR。
IBM MQ队列通道创建配置图示
IBM MQ队列通道创建配置图示一:发送方服务器配置1.1:创建建队列管理器选定队列管理器:点击右键――新建――队列管理器输入:队列管理器名称:L01(可任意定义)点击下一步,下一步,日志路径可以更改在侦听端口处输入端口号:1422(可任意定义)** 输入的时候要记住这个端口号(继续看下去,你就知道这个端口号有很大作用)点击完成,创建成功后,刷新队列管理器,看到新建的队列名称L01 1.2:创建本地队列点击L01--队列-右键-新建-本地队列输入本地队列名称,选择“缺省持久性:持久,作用域:队列管理器”在触发器属性页处,选择:触发器控制:打开,绑定触发器名称点击确定,新建好:本地队列LQ 011.3:创建本地传输队列:点击TQ01--队列-右键-新建-本地队列输入本地队列名称,选择“缺省持久性:持久,作用域:队列管理器”用法下拉框中选择:传输在触发器属性页处,选择:触发器控制:打开,绑定触发器名称点击确定,新建好,传输队列TQ011.4:创建远程队列:点击TQ01--队列-右键-新建-远程队列定义输入远程队列名称:RQ01选择“缺省持久性:持久,作用域:队列管理器”远程队列名称处:输入将要接收的远程队列管理器的本地队列名称)(LQ02)远程队列管理器名称:输入将要接收的远程队列管理器的名称(R01)传输队列名称:选择本地刚才新建的传输队列名称:TQ011.5:创建发送通道:点击TQ01--高级-通道-发送方通道输入发送方通道名称,LD01连接名称处:输入:将要接收的远程队列所在的服务器的IP及端口传输队列绑定:本地的传输队列(TQ01),点击确定,创建好发送通道LD011.6:创建接收通道点击TQ01--高级-通道-接收方通道,输入接收方通道名称就OK到这里:发送方服务器配置就Ok了。
二:接收方服务器配置---------------------------------------------------------2.1 创建队列管理器队列管理器名称:R01(可任意定义)点击下一步,下一步,日志路径可以更改在侦听端口处输入端口号:1422(可任意定义)输入的时候要记住这个端口号,点击完成2.2 创建本地队列点击R01--队列-右键-新建-本地队列输入本地队列名称,选择“缺省持久性:持久,作用域:队列管理器”在触发器属性页处,选择:触发器控制:打开,绑定触发器名称点击确定,新建好:本地队列LQ 02到这里接收方的服务器配置就OK好了。
mq的使用场景和步骤
mq的使用场景和步骤MQ(Message Queue)是一种异步通信模式,在分布式系统中被广泛应用。
它将消息从一个应用程序传递到另一个应用程序,可以解耦应用程序之间的直接依赖关系。
MQ的使用场景:1. 异步任务处理:可以将耗时的任务放在消息队列中处理,提高系统的并发能力和响应速度。
2. 应用解耦:不同的应用之间可以通过消息队列进行解耦,提高系统的可伸缩性和可维护性。
3. 数据同步:可以将不同系统之间的数据同步操作通过消息队列进行异步处理。
4. 流量削峰:在大并发请求下,可以通过消息队列来控制系统的流量,避免系统崩溃或过载。
5. 日志处理:将日志消息发送到消息队列,然后通过消费者处理和存储,以降低日志系统的压力。
MQ的使用步骤:1. 安装和配置MQ系统:选择适合自己系统的MQ软件,如RabbitMQ、Kafka等,并进行相应的安装和配置。
2. 创建消息队列:在MQ系统中创建一个或多个消息队列,用于存储消息。
3. 发送消息:生产者将要发送的消息发送到消息队列中。
4. 接收消息:消费者监听(或订阅)消息队列,当有消息到达时,消费者接收并处理消息。
5. 处理消息:消费者处理接收到的消息,根据业务需求进行相应的处理逻辑。
6. 确认消息:当消费者成功处理一条消息后,向MQ系统发送确认消息,表示这条消息已经被处理完成。
7. 监控和调优:根据实际情况监控MQ的性能指标,进行性能调优以提高系统的稳定性和可靠性。
需要注意的是,不同的MQ系统可能会有一些细微的差别,具体的使用步骤可能会有所不同。
因此,在使用特定MQ系统之前,应该详细了解该MQ系统的使用文档和实践经验。
IBM MQ入门
IBM WMQ1.技术介绍1.1. 总体介绍消息队列(MQ)是一种应用程序对应用程序的通信方法。
应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。
排队指的是应用程序通过队列来通信。
队列的使用除去了接收和发送应用程序同时执行的要求。
IBM WebSphere MQ 产品支持应用程序通过不同组件如处理器、子系统、操作系统以及通信协议的网络彼此进行通信。
例如,IBM WebSphere MQ 支持35 种以上的不同操作系统。
IBM WebSphere MQ 支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。
在IBM WebSphere MQ 服务器上,JMS 绑定方式被映射到MQI。
如图所示,应用程序直接与其本地队列管理器通过使用MQI 进行对话,MQI 是一组要求队列管理器提供服务的调用。
MQI 的引人之处是它只提供13 次调用。
这意味着对于应用程序编程员它是一种非常易于使用的接口,因为大部分艰苦工作都将透明完成的。
1.2. 术语定义2.安装2.1. 下载最新版本:7.0.1.3有多个版本:linux_32,linux_64,linux_win2.2. 硬件环境2.3. 安装上传文件到相关目录,CZJ3YML.tar.gz输入1安装后会自动创建系统用户及用户组:mqm 程序安装目录:/opt/mqm数据相关目录:/var/mqmJava相关jar包:/opt/mqm/java/lib后续操作用mqm用户操作2.4. 卸载1.用root帐号登录系统2.停止所有队列管理器//查看正在运行的队列管理器dspmq//停止所有跟队列管理器相关的监听程序,注意:QueueManagerName是队列队列管理器名称,具体名称用命令dspmq查询endmqlsr -m QueueManagerName//停止所有正在运行的队列管理器endmqm QueueManagerName3. //确认所有跟MQ有关的进程都已经停止ps -ef | grep mq4.//查看安装了那些相关的包rpm -q -a | grep MQSeries//一次性删除所有安装的包,以下命令只是一个示例,命令后面的包名称是命令“rpm -q -a | grep MQSeries” //查询所得的所有包名称,包名之间用空格分隔,rpm -ev MQSeriesRuntime-6.0.0-0 MQSeriesServer-6.0.0-0 MQSeriesServer-6.0.0-05.删除用户userdel mqm6.删除文件rm -rf /opt/mqm/rm -rf /var/mqm/7.重启主机2.5. 重新启动MQ3、启动服务启动命令服务器:非必须启动侦听器:验证队列管理器和侦听器在两台计算机上运行,然后启动通道:3.配置配置过程包括以下几个步骤:1.创建队列管理器。
IBMWebSphereMQ安装及配置详解
IBMWebSphereMQ安装及配置详解1. 打开MQ安装程序,选择下⼀步,默认安装WebSphere MQ,2. 完成MQ的安装⼯作,启动WebSphere MQ,3. 服务器配置,选择新建队列管理器,创建名为 "mq"的队列管理器,其他选项默认不变,点"下⼀步"4. 允许在 TCP/IP上进⾏队列管理器的远程管理,点击"下⼀步",完成MQ队列管理器的创建。
5. 新建本地队列,在mq下创建名为"MQ_send"的本地队列(⽤户可以根据⾃⼰的需求更改本地队列的名字和数量),其他选项默认即可。
6. 在 mq下创建名为"MQ_CHL"的服务器通道,其他选项默认即可。
7. 在MQ服务器端的计算机⽤户中添加MQ客户端所在计算机的系统⽤户。
例如:我的MQ客户端所在的计算机⽤户名为Administrator,则在服务器端系统中添加名为"Administrator"的⽤户。
具体步骤如下:<1>点击"开始"->"控制⾯板"->"管理⼯具"->"计算机管理"->"本地⽤户和组"->"⽤户",选择Administrator点右键,打开属性⾯板,选择“⾪属于”把mqmt添加进去。
如下图所⽰:(如果客户端计算机使⽤的其他的⽤户名,在服务器端新建⼀个⽤户名,同样操作,把⽤户名添加⾪属于mqm组⾥⾯)注意:1. 客户端连接MQ服务出现2035错误MQRC_NOT_AUTHORIZED2.找到mq的安装⽬录下的bin⽬录,在cmd环境下执⾏命令runmqsc 然后执⾏命令 alter qmgr chlauth(disabled) 把权限验证下掉就可以了,如下图所⽰:3. MQ常⽤命令:登录MQI,⼀般是cd到MQ安装⽬录下bin,然后切换mqm账户,mqm账户是mq默认的管理员账户。
IBM MQ队列通道创建配置图示
IBM MQ队列通道创建配置图示一:发送方服务器配置1.1:创建建队列管理器选定队列管理器:点击右键――新建――队列管理器输入:队列管理器名称:L01(可任意定义)点击下一步,下一步,日志路径可以更改在侦听端口处输入端口号:1422(可任意定义)** 输入的时候要记住这个端口号(继续看下去,你就知道这个端口号有很大作用)点击完成,创建成功后,刷新队列管理器,看到新建的队列名称L01 1.2:创建本地队列点击L01--队列-右键-新建-本地队列输入本地队列名称,选择“缺省持久性:持久,作用域:队列管理器”在触发器属性页处,选择:触发器控制:打开,绑定触发器名称点击确定,新建好:本地队列LQ 011.3:创建本地传输队列:点击TQ01--队列-右键-新建-本地队列输入本地队列名称,选择“缺省持久性:持久,作用域:队列管理器”用法下拉框中选择:传输在触发器属性页处,选择:触发器控制:打开,绑定触发器名称点击确定,新建好,传输队列TQ011.4:创建远程队列:点击TQ01--队列-右键-新建-远程队列定义输入远程队列名称:RQ01选择“缺省持久性:持久,作用域:队列管理器”远程队列名称处:输入将要接收的远程队列管理器的本地队列名称)(LQ02)远程队列管理器名称:输入将要接收的远程队列管理器的名称(R01)传输队列名称:选择本地刚才新建的传输队列名称:TQ011.5:创建发送通道:点击TQ01--高级-通道-发送方通道输入发送方通道名称,LD01连接名称处:输入:将要接收的远程队列所在的服务器的IP及端口传输队列绑定:本地的传输队列(TQ01),点击确定,创建好发送通道LD011.6:创建接收通道点击TQ01--高级-通道-接收方通道,输入接收方通道名称就OK到这里:发送方服务器配置就Ok了。
二:接收方服务器配置---------------------------------------------------------2.1 创建队列管理器队列管理器名称:R01(可任意定义)点击下一步,下一步,日志路径可以更改在侦听端口处输入端口号:1422(可任意定义)输入的时候要记住这个端口号,点击完成2.2 创建本地队列点击R01--队列-右键-新建-本地队列输入本地队列名称,选择“缺省持久性:持久,作用域:队列管理器”在触发器属性页处,选择:触发器控制:打开,绑定触发器名称点击确定,新建好:本地队列LQ 02到这里接收方的服务器配置就OK好了。
IBMMQ常用命令
IBMMQ常用命令IBM MQ是一款广泛应用于企业级应用程序开发和数据传输的消息队列软件。
该软件具有出色的可扩展性和稳定性,可满足不同规模和需求的企业应用场景。
为了更好地管理和操作IBM MQ,下面将介绍IBMMQ常用命令。
1. crtmqm命令crtmqm命令是创建IBM MQ队列管理器的命令。
例如,要创建一个名为QMGR1的队列管理器,我们可以使用以下命令:crtmqm QMGR12. strmqm命令strmqm命令是启动IBM MQ队列管理器的命令。
例如,要启动名为QMGR1的队列管理器,我们可以使用以下命令:strmqm QMGR13. endmqm命令endmqm命令是停止IBM MQ队列管理器的命令。
例如,要停止名为QMGR1的队列管理器,我们可以使用以下命令:endmqm QMGR14. runmqsc命令runmqsc命令是启动IBM MQ命令行管理工具的命令。
我们可以在命令行模式下使用该命令来执行各种MQ管理任务。
例如,要启动runmqsc,我们可以使用以下命令:runmqsc QMGR15. crtmqobj命令crtmqobj命令是创建IBM MQ队列和通道的命令。
例如,要创建一个名为MYQUEUE的本地队列,我们可以使用以下命令:crtmqobj QMGR1 QLOCAL(MYQUEUE)6. dltmqobj命令dltmqobj命令是删除IBM MQ队列和通道的命令。
例如,要删除名为MYQUEUE的本地队列,我们可以使用以下命令:dltmqobj QMGR1 QLOCAL(MYQUEUE)7. display命令display命令是显示IBM MQ队列管理器、队列和其他对象的信息的命令。
例如,要显示名为QMGR1的队列管理器的配置信息,我们可以使用以下命令:display qmgr QMGR18. Inquire命令Inquire命令是查询IBM MQ队列管理器、队列和其他对象的信息的命令。
IBM_MQ常用命令
IBM_MQ常⽤命令1. 队列管理器1.1. 创建队列管理器命令:crtmqm⽰例:1.2. 启动队列管理器命令:strmqm停⽌队列管理器命令:endmqm -c|-w|-i|-p参数说明:-c 受控关闭(或停顿关闭)。
这是缺省值。
队列管理器停⽌,但仅当所有应⽤程序已断开连接后才停⽌。
当前正在处理的任何MQI 调⽤已完成。
⽴即将控制权返回给您,并且不通知您队列管理器是何时停⽌的。
对通过服务器连接通道连接的任何客户机应⽤程序的影响等效于以QUIESCE ⽅式发出的STOP CHANNEL 命令。
-w 等待关闭。
此类型的关闭等效于受控关闭(除了仅当队列管理器已停⽌后才将控制权返回给您之外)。
当执⾏关闭时,您将接收到消息:等待队列管理器qmName 结束。
对通过服务器连接通道连接的任何客户机应⽤程序的影响等效于以QUIESCE ⽅式发出的STOP CHANNEL 命令。
-i ⽴即关闭。
队列管理器在完成所有当前正在处理的MQI 调⽤后停⽌。
任何在该命令发出后发出的MQI 请求都将失败。
当队列管理器再次启动时,任何未完成的⼯作单元将回滚。
队列管理器结束后返回控制权。
对通过服务器连接通道连接的任何客户机应⽤程序的影响等效于以FORCE ⽅式发出的STOP CHANNEL 命令。
-p 抢先关闭。
仅在意外情况下使⽤此类型的关闭。
例如,当队列管理器在常规endmqm 命令下未停⽌。
队列管理器可以停⽌⽽不等待应⽤程序断开连接或MQI 调⽤完成。
这可能会产⽣WebSphere MQ 应⽤程序的不可预测的结果。
关闭⽅式设置为⽴即关闭。
如果队列管理器稍后未停⽌,关闭⽅式将升级,且终⽌所有剩余的的队列管理器进程。
对通过服务器连接通道连接的任何客户机应⽤程等效于以TERMINATE ⽅式发出的STOPCHANNEL 命令。
1.3. 删除队列管理器命令:dltmqm1.4. 显⽰队列管理器启动状态2. 管理本地MQ对象使⽤MQSC 命令执⾏本地管理任务使⽤MQSC命令执⾏定义或修改队列、通道等操作。
MQ队列配置
MQ 队列配置队列管理器配置: 1、 队列管理器配置: 2、 MQ8630: Display listener information details. 3、 LISTENER(ABS_LSR_TEST) CONTROL(QMGR) 4、 TRPTYPE(TCP) PORT(14109) 5、 IPADDR(107.6.61.83) BACKLOG(0) ALTDATE(2009-066、 DESCR( ) ALTDATE(2009-06-01) 7、 ALTTIME(19.04.54) 1.1、 建立队列管理器: 建立队列管理器: 1、创建队列管理器 crtmqm -lf 4096 -lp 5 -ls 58 ACS_QM_NBCB # 5 个主日志、58 个辅助日志(主日志备用) 4KB 为单位,缺省 1024 即 4MB # 4096=1024×4=16M 2、启动队列管理器 strmqm ACS_QM_NBCB 3、 进入队列管理器 runmqsc ACS_QM_NBCB dis qmgr CCSID #查看 CCSID alter qmgr CCSID(819) # 修改 CCSID def chl(ACS_SVR_CHL) CHLTYPE(SVRCONN) MCAUSER(‘mqm’) # 建立服务通道 # ACS_SVR_CHL 是通道名,SVRCONN 是通道类型,mqm 是用户名 start chl(ACS_SVR_CHL) # 启动服务通道 def ql(INITQ) LIKE(SYSTEM.CHANNEL.INITQ) #建立初始化队列 start chinit initq(INITQ) #启动初始化通道 end #退出队列管理器 runmqlsr -m ACS_QM_ICBC -t tcp -p #启动对队列管理器的侦听 重复上述步骤建立远程队列管理器 ABS_QM_NBCB,服务通道 ABS_SVR_CHL, 初始化队列 INITQ,并启动之。
mq 连接问题
MCAUSER('') +
REPLACE +
SSLPEER('') +
DESCR('')
5.创建服务器连接通道 SVRCONN
DEFINE CHANNEL(S_NT) CHLTYPE(SVRCONN) REPLACE
DEFPSIST(NO) +
CLUSTER('') +
MAXMSGL(41943040) +
MAXDEPTH(1000000) +
DESCR('')
2. 建立传输队列 PBC.0000.ONLINE.TRAN
*更改QM的字符集编码(CCSID)
ALTER QMGR FORCE CCSID(1381)
本地队列 q1
DEFINE QLOCAL ('q1') +
LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE) +
REPLACE SHARE USAGE(NORMAL) +
解释:创建 PBC.0000.ONLINE.TRAN 通道为 402100000010.0000.O1 的实时传输队列
DEFINE QLOCAL ('PBC.0000.ONLINE.TRAN') +
LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE) +
REPLACE SHARE USAGE(XMITQ) +
6. 定义接收通道 0000.402100000010.O1
单消息队列完成客户服务器进程之间的双向通信
单消息队列完成客户服务器进程之间的双向通信消息队列是一种用于进程间通信的机制,它允许不同的进程通过发送和接收消息来进行通信。
在客户-服务器模型中,客户进程和服务器进程可以使用单个消息队列进行双向通信。
消息队列是一个存放消息的缓冲区,它包含一个队列头和一个队列尾。
进程可以将消息写入队列的尾部,并从队列的头部读取消息。
在客户-服务器模型中,客户进程可以将请求消息写入队列,并等待服务器进程读取并处理该请求。
服务器进程可以从队列读取请求消息,并将处理结果写入队列,供客户进程读取。
以下是客户进程和服务器进程之间使用单消息队列进行双向通信的步骤:1.创建消息队列:首先,需要创建一个消息队列,用于客户和服务器之间的通信。
可以使用消息队列的函数来创建一个唯一的队列标识符。
2.客户进程发送请求消息:客户进程可以使用队列标识符将请求消息写入队列的尾部。
请求消息可以包含客户的请求类型、参数等信息。
3.服务器进程接收请求消息:服务器进程可以使用队列标识符从队列的头部读取请求消息。
服务器可以根据请求消息的类型进行相应的处理,并生成处理结果。
4.服务器进程发送处理结果消息:服务器进程可以使用队列标识符将处理结果消息写入队列的尾部。
处理结果消息可以包含服务器的处理结果、错误码等信息。
5.客户进程接收处理结果消息:客户进程可以使用队列标识符从队列的头部读取处理结果消息。
客户可以根据处理结果消息的内容进行相应的处理,如显示结果、处理错误等。
通过使用单消息队列进行双向通信,客户和服务器进程可以方便地进行交互。
客户进程可以发送多个请求消息到队列,而服务器进程可以按顺序读取并处理这些请求。
服务器进程可以将处理结果写入队列,供客户进程读取。
这种双向通信方式可以有效地实现客户和服务器之间的协作。
总结起来,单消息队列可以完成客户和服务器进程之间的双向通信。
客户进程可以发送请求消息到队列,而服务器进程可以从队列接收请求消息并处理。
服务器进程可以将处理结果写入队列,供客户进程读取。
rabbitmq中创建队列的方法
rabbitmq中创建队列的方法RabbitMQ是一种消息队列软件,用于处理大量的消息和任务。
在RabbitMQ中创建队列是非常重要的一步,因为它是消息传递的主要路径之一。
本文将介绍在RabbitMQ中创建队列的方法。
在RabbitMQ中创建队列的方法有两种:一种是使用AMQP协议的基本方法,另一种是使用RabbitMQ提供的管理界面。
1. 使用AMQP协议的基本方法使用AMQP协议的基本方法是通过客户端连接到RabbitMQ服务器,然后使用AMQP协议中定义的方法创建队列。
以下是使用Python语言创建队列的示例代码:``` pythonimport pika# 连接RabbitMQ服务器connection =pika.BlockingConnection(pika.ConnectionParameters('localhost'))channel = connection.channel()# 创建队列channel.queue_declare(queue='hello')# 发送消息channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')# 关闭连接connection.close()```在上面的代码中,我们使用pika库连接到RabbitMQ服务器,并使用channel.queue_declare()方法创建了一个名为“hello”的队列。
然后,我们使用channel.basic_publish()方法向队列发送了一条消息。
2. 使用RabbitMQ提供的管理界面RabbitMQ提供了一个管理界面,可以通过Web浏览器访问。
在管理界面中,您可以轻松地创建、管理和监控队列。
以下是使用RabbitMQ提供的管理界面创建队列的步骤:1. 打开Web浏览器,输入RabbitMQ服务器的地址和端口,登录管理界面。
MQ实验2_常用管理命令
MQ实验2试验目的1.熟悉MQ的管理2.熟悉MQ对象的创建方法3.熟悉MQ常用命令试验环境WinXP, SP2WebSphere MQ 6.0.2.0实验步骤尽管MQ在Windows中具有图形界面, 为了方便扩展到UNIX环境, 本练习中采用命令方式创建对象通过本试验,你可以1.创建和启动队列管理器2.用控制命令创建本地队列和显示MQ对象的属性3.修改队列属性和创建别名队列4.使用MQ产品中提供的样例程序放入消息,浏览消息和取出消息步骤一: 创建和启动队列管理器1.打开一个cmd环境, 进入到MQ安装目录下的bin目录,即C:\IBM\WMQ\bin2.创建一个缺省队列管理器,名为QM1,在后面的试验中,我们都将使用这个队列管理器,QM1是本机的队列管理器⇨crtmqm –q QM1队列管理器名称是大小写敏感的, -q参数表明是缺省队列管理器3.启动队列管理器⇨strmqm因为是启动缺省队列管理器,所以不需要提供队列管理器名称步骤二:使用交互式命令进行操作4.用runmqsc命令执行以下任务,输入MQ的交互式命令,在终端显示结果⇨runmqsci.显示队列管理器属性=> DISPLAY QMGRQMGR是保留字,不要用队列管理器名称代替ii.显示当前队列管理器中以”SYSTEM”开头的所有队列名称=> DISPLAY Q(SYSTEM*)iii.创建一个本地队列,定义中包含文本描述=> DEFINE QL(QL.A) DESCR(‘QL.A Text’)iv.显示该队列的所有属性=> DISPLAY QL(QL.A)v.修改该队列允许的最大消息数为1000=> ALTER QL(QL.A) MAXDEPTH(1000)vi.再次查看该队列属性,看修改是否成功,而队列描述不变=> DISPLAY QL(QL.A)vii.定义第二个本地队列,包含文本描述=> DEFINE QL(QL.B) DESCR(‘QL.B Text’)viii.显示队列QL.B的所有属性=> DISPLAY QL(QL.B)ix.使用带REPLACE的DEFEINE命令而不是用ALTER命令修改队列QL.B 的最大消息数为2000=> DEFINE QL(QL.B) REPLACE +MAXDEPTH(2000)x.查看队列QL.B的所有属性,是否该队列创建成功,描述是什么=> DISPLAY QL(QL.B)5.退出runmqsc模式⇨END步骤三:用包含命令的文件来执行MQ命令6.编辑一个文本文件E1_ST01.txt,包含步骤二中执行的所有命令如下DIS QMGRDIS Q(SYSTEM*)DEF QL(QL.A) DESCR('QL.A Text')DIS QL(QL.A)ALTER QL(QL.A) MAXDEPTH(1000)DIS QL(QL.A)DEF QL(QL.B) DESCR('QL.B Text')DIS QL(QL.B)DEF QL(QL.B) REPLACE +MAXDEPTH(2000)DIS QL(QL.B)7.执行以下命令,并把结果重定向到report文件当中,查看report文件⇨runmqsc < E1_ST01.txt > report步骤四:使用样例程序8.放一个消息到本地队列QL.A⇨amqsput QL.A队列管理器是可选参数,因为QL.A在缺省队列管理器中,所以不需要. amqsput,amqsbcg和amqsget样例位于C:\IBM\WMQ\Tools\c\Samples\Bin9.浏览队列QL.A中的消息,重定向输出到一个文件out以查看结果⇨amqsbcg QL.A >out⇨notepad out队列管理器是可选参数,因为QL.A在缺省队列管理器中,所以不需要10.从队列中取出消息,清空队列⇨amqsget QL.A队列管理器是可选参数,因为QL.A在缺省队列管理器中,所以不需要步骤五:使用别名队列11.创建本地队列QL.A的别名队列QA.A⇨runmqsc⇨DEF QA(QA.A) TARGQ(QL.A)12.限制别名队列的put请求功能=> ALTER QA(QA.A) PUT(DISABLED)13.修改QL.B的属性,限制它的put功能=> ALTER QL(QL.B) PUT(DISABLED)14.创建本地队列QL.B的别名队列QA.B=> DEF QA(QA.B) TARGQ(QL.B)15.尝试用样例程序放消息到本地队列和别名队列中⇨amqsput QL.A⇨amqsput QA.A⇨amqsput QL.B⇨amqsput QA.B可选试验步骤一: 队列操作1.在队列QL.A和QL.B中放入一些消息2.查看这两个队列中的队列深度=> DISPLAY Q(Q*) CURDEPTH3.定义一个新的本地队列QL.X,它具有跟QA.A一样的属性=> DEFINE QLOCAL(QL.X) LIKE(QA.A)4.报错了吗?,那么用QL.A的属性=> DEFINE QLOCAL(QL.X) LIKE(QL.A)5.往队列QL.X中放消息=> amqsput QL.X6.修改QL.A的描述=> ALTER QL(QL.A) DESCR(‘QL.A Text new’)7.显示你创建的所有队列的描述=> DISPLAY Q(Q*) DESCR8.清除队列QL.A=> CLEAR QL(QL.A)9.清除队列QA.A, error???=> CLEAR QA(QA.A)10.删除队列QL.X=> DELETE QL(QL.X)11.如果删除失败,再次删除=> DELETE QL(QL.X) PURGE。
rocketmq 双master 原理
rocketmq 双master 原理RocketMQ是一种基于消息传递的分布式消息中间件,具有高性能、高可用和高吞吐量的特点。
在RocketMQ中,双主题(双Master)是一种常见的架构模式,可以提高系统的可用性和容错能力。
一、什么是双Master架构模式?双Master架构模式是指在RocketMQ中使用两个独立的Master节点来处理消息生产和消费的请求。
每个Master节点都有自己的存储和缓存,可以独立地处理消息传输和存储,从而提高系统的可用性和容错能力。
二、双Master架构模式的原理是什么?1. 主题划分在双Master架构模式中,每个主题会被划分为若干不同的队列。
每个队列都会被分配给一个Master节点进行管理。
这样可以将消息的负载进行均衡,并提高系统的并行处理能力。
2. 主节点选举在双Master架构模式中,为了保证系统的可用性,需要选举出一个主节点来处理消息的生产和消费请求。
RocketMQ采用了基于ZooKeeper的主节点选举算法。
当一个Master节点宕机或者网络故障时,ZooKeeper会监测到节点的状态变化,并重新选举出一个新的主节点来接管原主节点的工作。
3. 消息同步在双Master架构模式中,主节点和备份节点之间采用了主从复制机制来实现消息的同步。
当主节点接收到生产者发送的消息后,会将消息写入自己的消息存储中,并将消息的元数据(如消息的位置和偏移量)发送给备份节点。
备份节点则会复制主节点的消息存储,并对消息进行备份。
这样可以保证在主节点故障时,备份节点可以接管主节点的工作,并保证消息的可靠传输。
4. 消息读取在双Master架构模式中,消息的消费者会同时从多个Master节点中读取消息。
RocketMQ采用了异步复制机制来实现消息的读取。
当一个消费者从一个Master节点中读取消息时,RocketMQ会将消息的元数据发送给其他Master 节点,然后消费者可以同时从多个Master节点中读取消息,从而提高系统的读取吞吐量。
MQ消息队列搭建命令及方法
MQ消息队列搭建命令及⽅法 MQ 是⼀款稳定、安全⼜可靠的消息传递中间件。
它使⽤消息和队列来⽀持应⽤程序、系统、服务和⽂件之间的信息交换。
它可以简化和加速多个平台中不同应⽤程序和业务数据的集成。
⽀持各种 API 和语⾔,并可以在本地、云和混合云中部署。
建⽴消息队列⽅法1.在linux服务器192.168.0.151上新建两个队列管理器QM1:mqm@mq:~> crtmqm QM12.启动QM1mqm@mq:~> strmqm QM13.运⾏MQSeries命令runmqsc QM14.创建QM1的通道:MSG_CHLDEFINE CHANNEL ('MSG_CHL') CHLTYPE(SVRCONN) +TRPTYPE(TCP) +DESCR(' ') +HBINT(300) +MAXMSGL(4194304) +MCAUSER('mqm') +RCVDATA(' ') +RCVEXIT(' ') +SCYDATA(' ') +SCYEXIT(' ') +SENDDATA(' ') +SENDEXIT(' ') +SSLCAUTH(REQUIRED) +SSLCIPH(' ') +SSLPEER(' ') +KAINT(AUTO) +MONCHL(QMGR) +COMPMSG(NONE) +COMPHDR(NONE) +SHARECNV(10) +MAXINST(999999999) +MAXINSTC(999999999) +REPLACE5. 创建侦听器:(端⼝号:7001)DEFINE LISTENER ('LISTENER_TCP') +TRPTYPE(TCP) +IPADDR(' ') +PORT(9000) +BACKLOG(0) +DESCR(' ') +CONTROL(QMGR) +REPLACE6.创建QM2的队列:MSG_QUEDEFINE QLOCAL ('MSG_QUE') +PUT(ENABLED) +DEFPSIST(YES) +DEFPRESP(SYNC) +CLWLUSEQ(QMGR) +SCOPE(QMGR) +GET(ENABLED) +PROPCTL(COMPAT) +DEFREADA(NO) +MAXDEPTH(20000) +MAXMSGL(4194304) +USAGE(NORMAL) +NOTRIGGER +TRIGTYPE(FIRST) +QDPMAXEV(ENABLED) +QDPHIEV(DISABLED) +QDPLOEV(DISABLED) +STATQ(QMGR) +MONQ(QMGR) +ACCTQ(QMGR) +DEFBIND(OPEN) +REPLACE7.重启消息队列管理器结束本地队列管理器 endmqm MQ1启动本地队列管理器 strmqm MQ1若侦听没启动,执⾏ runmqlsr LISTENER_TCP8.发送报⽂测试运⾏mqm@mq:~/sh> amqsput QR QM1输⼊“this is a test!”,双击回车结束9.通过队列深度或⽇志查看消息是否成功发送到队列上。
MQ队列及常见操作
MQ队列及常见操作⼀、创建MQ队列管理器1.1准备⼯作到所安装websphere mq的机⼦上,进⼊/opt/mm/bin⽬录下,查询相关mq的情况,通过命令⾏./dspmq。
创建mq队列管理器的的时候要⽤mqm⽤户进⾏创建,切换到mqm⽤户:su mqm1.2详细操作备注:红⾊加粗字体可替换1、创建mqm⽤户组【正常已经建好】2、创建mqm⽤户,将⽤户mqm添加到mqm⽤户组下【正常已经建好】3、创建队列管理器【必须】./crtmqm -q QSHAW4、启动队列管理器【必须】./strmqm QSHAW5、进⼊到MQSC管理界⾯【必须】./runmqsc QSHAW6、定义监听【必须】DEFINE LISTENER(TCPLISTENER.QSHAW) TRPTYPE(TCP) CONTROL(QMGR) PORT(1413)7、启动监听【必须】START LISTENER(TCPLISTENER.QSHAW)8、建⽴通道【必须】DEFINE CHANNEL(QSHAW.SVRCONNC) CHLTYPE(SVRCONN) MCAUSER('mqm')9、建⽴队列【可选,要⽤的话就要创建】DEFINE QLOCAL(QSHAW.OUT)DEFINE QLOCAL(QSHAW.INT)10. 建⽴话题【可选】DEFINE TOPIC(TOPIC.QSHAW) TOPICSTR(TOPIC)11. 退出MQSC管理界⾯【退出】END12.删除队列管理器【删除】dltmqm QTEST13. 测试的话,通过IBM MQ Explorer进⾏。
14.关闭通道授权,如果报不允许访问。
您⽆权执⾏此操作【报错关闭授权】ALTER QMGR CHLAUTH(disabled)15.其他操作可以通过IBM MQ Explorer可视化进⾏操作。
16.如果客户端程序调⽤MQ报⼀下2035的错误时,请按⼀下⽅法配置MQ【可选】(1)、设置通道安全:以mqm⽤户登录,执⾏runmqsc命令:SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST(*MQADMIN) ACTION(REMOVE)SET CHLAUTH(S2T) TYPE(ADDRESSMAP) ADDRESS(10.8.203.215) USERSRC(MAP) MCAUSER('mqm') ACTION(ADD)SET CHLAUTH(S2T) TYPE(USERMAP) CLNTUSER('Win7-user') USERSRC(MAP) MCAUSER('mqm') ACTION(ADD)(2)、说明:a、设置通道安全为MQV7.1的新功能。
MQ命令基本操作---
MQ命令基本操作---一.MQ基本操作MQ中有几个很重要的组件:队列管理器(QueueManager)、队列(Queue)和通道(Channel)。
其基本的操作方法如下:创建队列管理器crtmqm –q QMgrName -q是指创建缺省的队列管理器删除队列管理器dltmqm QmgrName启动队列管理器strmqm QmgrName 如果是启动默认的队列管理器,可以不带其名字停止队列管理器endmqm QmgrName 受控停止endmqm –i QmgrName 立即停止endmqm –p QmgrName 强制停止显示队列管理器dspmq –m QmgrName运行MQSeries命令runmqsc QmgrName 如果是默认队列管理器,可以不带其名字查看通道状态dis chl(通道名称)往队列中放消息amqsput QName QmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字从队列中取出消息amqsget QName QmgrName如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字启动通道 135********runmqchl –c ChlName –m QmgrName停止通道stop chl(chlname)复位通道reset chl(chlname)启动侦听runmqlsr –t TYPE –p PORT –m QMgrName停止侦听endmqlsr -m QmgrNameMQSeries命令定义死信队列DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE设定队列管理器的死信队列ALTER QMGR DEADQ(QNAME)定义本地队列DEFINE QL(QNAME) REPLACE定义别名队列DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)远程队列定义DEFINE QREMOTE(QRNAME) +RNAME(AAA) RQMNAME(QMGRNAME) +XMITQ(QTNAME)定义模型队列DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)定义本地传输队列DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) + INITQ(SYSTEM.CHANNEL.INITQ)+PROCESS(PROCESSNAME) REPLACE创建进程定义DEFINE PROCESS(PRONAME) +DESCR(‘STRING’)+APPLTYPE(WINDOWSNT)+APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’) 其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT 等创建发送方通道DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE 其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建接收方通道:define channel(TO.TEST.R) chltype(rcvr) trptype(tcp)
在一台PC(win7)创建两个队列管理器,实现两者通信
首先是创建两个队列管理器
1. QM1:TEST_QM
2. QM2:TEST_RQM
crtmqm-q TEST_QM
crtmqm-q TEST_RQM
队列管理器QM1:TEST_QM
队列名
队列属性
DATA
本地队列
define qlocal(DATA)
define qremote(REMOTE.DATA) rname(DATA) rqmname(TEST_QM) xmitq(TEST)
TEST
传输队列
define qlocal(TEST) usage(xmitq)
创建对TEST_QM的监听:define listener(DATA.LISTENER) trptype(tcp) control(qmgr) port(1418)
创建接收方通道:define channel(TO.TEST) chltype(rcvr) trptype(tcp)
队列管理器QM2:TEST_QM2
队列名
队列属性
DATA.R
本地队列
define qlocal(DATA.R)
REMOTE.DATA
远程队列
指向队列:DATA指向队列管理器:TEST_QM
注意事项:
1. QM1和QM2的通道名称要一致,当然QM1和QM2可以互为发送方,因此本例中有两条通道;
2. QM1的监听端口号要与QM2的通道端口一致,如果QM2到QM1有多条发送通道,那QM1要相应匹配地创建相同数目的监听
创建对TEST_RQM的监听(tcp) control(qmgr) port(1417)
创建发送方通道:define channel(TO.TEST.R) chltype(sdr) conname('127.0.0.1(1418)') xmitq(TEST.R) trptype(tcp)
REMOTE.DATA.R
远程队列
指向队列:DATA.R指向队列管理器:TEST_RQM
define qremote(REMOTE.DATA.R) rname(DATA.R) rqmname(TEST_RQM) xmitq(TEST.R)
TEST.R
传输队列
define qlocal(TEST.R) usage(xmitq)