这篇文章用于加深对MQ发送接收信息的理解,有错误之处请评论区予以指点,多谢

*MQ配置

一、双方定义

首先MQ是用来通信的,所以会有收发消息的双方,我们假设,发送消息的A与接收消息的B

二、A方配置(发送方)

1、新建队列管理器

打开“WebSphere MQ资源管理器”,新建队列管理器,名称为A_dlglq_name(发送端mq队列管理器名称),其余采用默认设置;

2、创建本地队列

A_dlglq_name(发送端mq队列管理器名称) 队列管理器中创建本地队列,名称为A_bddl_name(发送端mq本地队列名称);

3、创建本地传输队列

创建传输队列,名称为A_bdcsdl_name(发送端mq本地传输队列名称)(新建时选择“本地队列”,将“用法”设置为“传输”);

4、创建远程队列

创建远程队列定义,名称为A_ycdl_name(发送端mq远程队列名称),指定远程队列名称为B_bddl_name(接收端mq本地队列名称),远程队列管理器名称为B_dlglq_name(接收端mq队列管理器名称),传输队列名称为A_bdcsdl_name(发送端mq本地传输队列名称);

5、创建发送方通道

创建发送方通道,名称为A_B(发送端发送消息到接收端的通道名称),传输协议为TCP/IP,连接名称为接收端ip地址(接收端mq的端口) 如172.100.100.1(1234),传输队列为A_bdcsdl_name(发送端mq本地传输队列名称),本地通信地址写本机ip;

6、创建服务器连接通道

创建服务器连接通道,名称为DC.SVRCONN,采用默认设置(该通道主要给后面的测试程序使用)。

7、A端发送消息

找到A_ycdl_name 远程队列,右键选择放入测试消息,在下图位置放入消息

三、B方配置(接收方)

1、新建队列管理器

打开“WebSphere MQ资源管理器”,新建队列管理器,名称为B_dlglq_name(接收端mq队列管理器名称),其余采用默认设置;

2、创建本地队列

B_dlglq_name(接收端mq队列管理器名称)队列管理器中创建本地队列,名称为B_bddl_name(接收端mq本地队列名称);

3、创建接受方通道,

创建接受方通道,名称为A_B(必须与发送端发送到接收端的通道名称相同),采用默认设置;

4、创建服务器连接通道

创建服务器连接通道,名称为DC.SVRCONN,采用默认设置。

5、客户端读取消息代码及jar包(非固定,可使用厂商提供版本)

代码:

import com.ibm.mq.MQC;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;public class IBMQRead {/** 变量 */private final static int OPENOPTIONS = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT | MQC.MQOO_INQUIRE;static{MQEnvironment.hostname = "192.168.0.158";MQEnvironment.channel = "DC.SVRCONN";MQEnvironment.port = 1414;MQEnvironment.CCSID = 1381;}public static void main(String[] args) {try {//初始化MQQueueManager queueManager = new MQQueueManager("khd_dlgl_name");//队列管理器名称//  队列名称MQQueue mqQueue = queueManager.accessQueue("khd_bddl_name", OPENOPTIONS, null, null, null);//获取管道深度int currentDepth = mqQueue.getCurrentDepth();//进行遍历管道中的所有数据内容while(currentDepth-- > 0){// 要读的队列的消息MQMessage mqMessage = new MQMessage();mqQueue.get(mqMessage);int dataLength = mqMessage.getDataLength();//得到字符串String readXml = mqMessage.readStringOfByteLength(dataLength);System.out.println(readXml);}} catch (Exception e) {e.printStackTrace();}}
}

jar包:

        <!-- IBMMQ --><dependency><groupId>com.ibm.mq</groupId><artifactId>jmqi</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm.mq</groupId><artifactId>headers</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm</groupId><artifactId>mq</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm.mq</groupId><artifactId>jms</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm.mq</groupId><artifactId>dhbcore</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm</groupId><artifactId>mqjms</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm.mq</groupId><artifactId>connector</artifactId><version>7.5</version></dependency><dependency><groupId>com.ibm.mq</groupId><artifactId>commonservices</artifactId><version>7.5</version></dependency>

*MQ消息流转

一、消息流转目标方向:A--->B详解

1、从A方定义的远程队列A_ycdl_name放入消息

2、根据A_ycdl_name 的配置找到本地传输队列A_bdcsdl_name,确定B方的队列管理器B_dlglq_name和本地队列名B_bddl_name

3、根据拥有A_bdcsdl_name的发送方通道A_B中配置的传输方式TCPIP端口连接对方

4、根据第二步第三步得到的信息,将消息使用TCP方式通过通道发送到B的IP端口B的队列管理器B方本地队列

5、B方自己从本地队列中取数据

二、一般收发报文规则

1、报文中一般存在mesgid(消息标识号)是用来区分交易的唯一标志(每次不同且不重复)

2、还会存在msrfid(消息参考号)用来确认一笔往返报文的唯一值(每笔不同且不重复)

3、双方给对方发的报文都会携带这两个值,如:

  • A发送报文时mesgid=0001msrfid=123
  • B接收报文后想进行回执时,会新生成mesgid=M9001,并将A发来的msrfid=123返回

即:同一个msrfid代表同一笔交易。

ShyTan原创文章,转载请标明原出处:https://blog.csdn.net/ShyTan/article/details/115756610

IBM Websphere mq消息队列的理解相关推荐

  1. IBM websphere MQ远程队列的简单配置

    原理: 1.远程队列分发送方和接收方 2.接收方配置: 接收方配置要先拿到对方的发送通道配置,接收方的队列名称必须和远程发送方的队列名称一致,告诉远程发送方,你的地址,队列管理器名称等信息,在通道中建 ...

  2. websphere mq_最佳实践:WebSphere MQ共享队列和应用程序

    websphere mq 关于IBM®WebSphere®MQ共享队列的优点,尤其是它们提供消息的连续可用性的能力,已有很多论述. 但是,在规划和实施过程中,出现了一些有关最佳使用共享队列及其对应用程 ...

  3. spring boot整合IBM WebSphere MQ,并配置多个队列管理器

    IBM WebSphere MQ概述 网上关于IBM WebSphere MQ的资料挺少的,毕竟是一项老技术,整理一下从零开始对于IBM WebSphere MQ的理解 IBM WebSphere M ...

  4. IBM Websphere MQ 基础4:Channel通道与MQ间消息传输

    概念 WebSphere® MQ uses two different types of channels: A message channel, which is a unidirectional ...

  5. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  6. mq查看队列管理器信息linux,IBM WebSphere MQ for linux 安装详解 | MUCHINFO

    前言 首先介绍一下MQ MQ消息队列的简称是一种应用程序对应用程序的通信方法.说白了也就是通过队列的方式来对应用程序进行数据通信.而无需专用链接来链接它们. MQ的通讯方式 1.数据报的方式 Data ...

  7. IBM WebSphere MQ 7.5基本用法

    一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...

  8. 使用c#操作IBM WebSphere MQ

    IBM WebSphere MQ 5.3升级到CSD05之后,提供了使用.net操作MQ的类库,安装完成之后,会在MQ的安装目录的bin文件夹下面多出一个amqmdnet.dll文件,把这个DLL作为 ...

  9. IBM WebSphere MQ安装及使用教程

    IBM WebSphere MQ安装及使用教程 Linux下websphere MQ安装 #软件安装目录 mkdir /opt/mqm #添加用户组mqm groupadd mqm useradd - ...

最新文章

  1. oracle补丁怎么配置,如何检查Oracle补丁是否已安装?
  2. box-shadow属性四个值_重学前端:什么是盒子模型?标准盒子模型有哪些属性和尺寸计算?...
  3. 使用 Apache OpenJPA 开发 EJB 3.0 应用,第 6 部分: 处理实体生命周期事件的回调
  4. Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。
  5. 离职总结:大公司与小公司的个人体验
  6. MongoDB服务重启及后台运行解决方法
  7. Xcode 6.0中彻底关闭ARC
  8. solidworks重建模型好慢_转发:解决SolidWorks运行慢,经常崩溃的方法
  9. Codeforces Round #438 B. Race Against Time
  10. Java poi操作导入导出excel
  11. 使用sqlmap进行SQL注入检测
  12. 解决WPS页码上有小横线问题
  13. plotly绘制简单图形10--金字塔图
  14. 网上花店java项目_Java+SSM实现网上花店售卖系统
  15. 华为笔试题4——最高分是多少
  16. alphacam模板@橱柜门专用alphacam模板
  17. 贴片陶瓷天线原理 与 HFSS模型建立和仿真分析总结
  18. 阿里 P10、腾讯 T4、华为 18,互联网公司职级、薪资、股权大揭秘-巴分巴秒
  19. oracle ovca_软而优则硬 甲骨文一体机启“大物移云”
  20. Sqoop-1.4.7-部署与常见案例

热门文章

  1. sql replace用法
  2. 适合手游党的低延迟游戏蓝牙耳机,双12高人气平价蓝牙耳机推荐
  3. 抢红包不是真的随机分配哟
  4. Ubuntu安装显卡驱动,配置conda环境,安装pytorch
  5. 不小心合并了icloud通讯录_如何在macOS和iCloud中合并和删除重复的联系人?
  6. (附源码)基于vue框架潮牌官网设计与实现 毕业设计010955
  7. 想要靠外包刷题,结果却大跌眼镜
  8. python人像绘制_用Python 代码实现简单图片人像识别换脸
  9. JVM内存 大小设置
  10. 最全解密微信红包随机算法(含代码实现)