首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >发送和接收IBM WebSphere MQ消息

发送和接收IBM WebSphere MQ消息

作者头像
用户7741497
发布于 2022-07-04 08:00:02
发布于 2022-07-04 08:00:02
3.3K00
代码可运行
举报
文章被收录于专栏:hml_知识记录hml_知识记录
运行总次数:0
代码可运行

发送和接收IBM WebSphere MQ消息

InterSystems IRIS为IBM WebSphere MQ提供了一个接口,可以使用该接口在InterSystems IRIS和IBM WebSphere MQ消息队列之间交换消息。要使用此接口,必须能够访问IBM WebSphere MQ服务器,并且IBM WebSphere MQ客户端必须与InterSystems IRIS在同一台计算机上运行。

该接口由%Net.MQSend%Net.MQRecv类组成,这两个类都是%Net.abstractMQ的子类。这些类使用由InterSystems IRIS在所有合适的平台上自动安装的动态链接库。(这是Windows上的MQInterface.dll;其他平台的文件扩展名不同。)。反过来,InterSystems IRIS动态链接库需要IBM WebSphere MQ动态链接库。

该界面仅支持发送和接收文本数据,不支持二进制数据。

使用IBM WebSphere MQ的RIS接口

通常,要使用IBM WebSphere MQ的InterSystems IRIS接口,请执行以下操作:

  1. 确保有权访问IBM WebSphereMQv7.x或更高版本。具体而言:
  • IBM WebSphere MQ客户端必须与InterSystems IRIS安装在同一台计算机上。请注意,安装程序会根据需要更新PATH环境变量并添加其他系统变量。
  • 确保在安装客户端后重新启动计算机,以便InterSystems IRIS能够识别该客户端。
  • 客户端必须能够访问IBM WebSphere MQ服务器。
  • 将用来访问服务器的用户名必须具有使用队列管理器和计划使用的队列的权限。
  1. 创建%Net.MQSend%Net.MQRecv的新实例,具体取决于要发送还是接收消息。
  2. 连接到IBM WebSphere MQ服务器。执行此操作时,您需要提供以下信息:
  • 队列管理器的名称。
  • 要使用的队列的名称。
  • 与该队列通信的通道。可以指定IBM WebSphere MQ服务器的通道名称、传输机制以及IP地址和端口。

如果正在使用IBM WebSphere MQ身份验证功能,还可以提供名称和密码。

  1. 调用%Net.MQSend%Net.MQRecv的相应方法来发送或接收消息。

注意:要在64位Linux平台上使用IBM Websphere MQ,必须设置LD_LIBRARY_PATH以包括MQ库的位置。因为必须为任何使用MQ接口的InterSystems IRIS进程设置路径,所以如果正在运行后台进程,则必须在启动InterSystems IRIS之前设置该路径,并在运行IRIS终端之前在任何UNIX®终端中设置该路径。

获取错误代码

%Net.MQSend%Net.MQRecv的方法如果成功则返回1,如果不成功则返回0。在出现错误的情况下,调用%GetLastError()方法,该方法返回IBM WebSphere MQ给出的最后一个原因代码。

创建连接对象

在可以通过IBM WebSphere MQ发送或接收消息之前,必须创建一个Connection对象,该对象可以建立到队列管理器的连接、打开通道和打开队列以供使用。有两种方法可以做到这一点:

  • 可以使用%Init方法,该方法接受指定所有所需信息的参数。
  • 可以在首次设置指定所有所需信息的属性后使用%Connect方法。

使用%Init()方法

要使用%Init()方法创建连接对象,请执行以下操作:

  1. 创建%Net.MQSend(如果要发送消息)或%Net.MQRecv(如果要接收消息)的实例。本主题将此实例称为连接对象。

注意:如果收到 <DYNAMIC LIBRARY LOAD>错误,则表示缺少动态链接库,并且messages.log文件(在系统管理器的目录中)有更多详细信息。

  1. 如果需要身份验证,请设置Connection对象的以下属性:
  • 用户名-指定有权使用此频道的用户名。
  • 密码-指定给定用户的密码。
  1. 调用Connection对象的%Init()方法。此方法按顺序接受以下参数。

a. 指定队列名称的字符串;这应该是指定队列管理器的有效队列。

b. 指定队列管理器的字符串;它应该是IBM WebSphere MQ服务器上的有效队列管理器。

如果省略此参数,系统将使用IBM WebSphere MQ中配置的默认队列管理器。或者,如果IBM WebSphere MQ已配置为队列管理器由队列名称确定,则系统将使用适合给定队列名称的队列管理器。

c. 指定频道规范的字符串,格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"channel_name/transport/host_name(port)"

这里,channel_name是要使用的通道的名称,Transport是通道使用的传输,host_name是运行IBM WebSphere MQ服务器的服务器名称(或IP地址),port是该通道应该使用的端口。

传输可以是以下之一:TCPLU62NETBIOSSPX

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"CHAN_1/TCP/rodan(1401)"
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"CHAN_1/TCP/127.0.0.1(1401)"

如果省略此参数,系统将使用IBM WebSphere MQ中配置的默认通道规范。或者,如果系统已配置为通道由队列名称确定,则系统使用适合给定队列名称的通道。

d. 一个可选字符串,它指定要向其中写入错误消息的日志文件。默认情况下,不进行日志记录。

  1. 检查%Init()方法返回的值。如果该方法返回1,则表明连接已成功建立,可以使用Connection对象发送或接收消息(具体取决于使用的类)。

使用%Connect()方法

在某些情况下,可能更喜欢单独指定连接的所有详细信息。为此,请使用%Connect()方法,如下所示:

  1. 创建%Net.MQSend(如果要发送消息)或%Net.MQRecv(如果要接收消息)的实例。如前所述,本主题将此实例称为连接对象。

注意:如果收到<DYNAMIC LIBRARY LOAD> 错误,则表示缺少动态链接库,并且messages.log文件(在系统管理器的目录中)有更多详细信息。

  1. 设置Connection对象的以下属性:
  • QName-(必选)指定队列名称;这应该是指定队列管理器的有效队列。
  • QMgr-指定要使用的队列管理器;它应该是IBM WebSphere MQ服务器上的有效队列管理器。

如果省略此参数,系统将使用IBM WebSphere MQ中配置的默认队列管理器。或者,如果IBM WebSphere MQ已配置为队列管理器由队列名称确定,则系统将使用适合给定队列名称的队列管理器。

  1. 或者,通过设置Connection对象的以下属性来指定要使用的频道:
  • Connection - 指定IBM WebSphere MQ服务器的主机和端口。例如:"127.0.0.1:1401"
  • Channel - 指定要使用的频道的名称。这必须是IBM WebSphere MQ服务器上的有效通道。
  • Transport - 指定通道使用的传输。此属性可以是以下之一: "TCP", "LU62", "NETBIOS", "SPX"

如果省略这些参数,系统将使用IBM WebSphere MQ中配置的默认通道规范。或者,如果系统已配置为通道由队列名称确定,则系统使用适合给定队列名称的通道。

  1. 如果频道需要身份验证,请设置Connection对象的以下属性:
  • 用户名-指定有权使用此频道的用户名。
  • 密码-指定给定用户的密码。
  1. 调用Connection对象的%ErrLog()方法。此方法接受一个参数,即要用于此连接对象的日志文件的名称。
  2. 检查%ErrLog()方法返回的值。
  3. 调用Connection对象的%Connect()方法。
  4. 检查%Connect()方法返回的值。如果该方法返回1,则表明连接已成功建立,可以使用Connection对象发送或接收消息(具体取决于您使用的类)。

指定字符集(CCSID)

要设置用于消息转换的字符集,请调用Connection对象的%SetCharSet()方法。指定在IBM WebSphere MQ中使用的整数编码字符集ID(CCSID)

  • 如果正在发送消息,这应该是这些消息的字符集。如果不指定字符集,则MQ系统假定消息使用为MQ客户端指定的默认字符集。
  • 如果要检索邮件,则这是要将这些邮件翻译为的字符集。

要获取当前正在使用的CCSID,请调用%charset()方法。此方法通过引用返回CCSID,并返回1或0以指示是否成功.

指定其他消息选项

要指定消息描述符选项,可以选择设置连接对象的以下属性:

  • ApplIdentityData指定应用程序标识消息描述符选项。
  • PutApplType指定PUT Application Type消息描述符选项。

发送消息

要发送邮件,请执行以下操作:

  1. 按照“创建连接对象”中的说明创建连接对象。在这种情况下,请创建%Net.MQSend的实例。Connection对象有一个消息队列,可以向该队列发送消息。
  2. 根据需要调用以下方法:
  • %put()-给定一个字符串,此方法将该字符串写入消息队列。
  • %PutStream()-给定初始化的文件字符流,此方法将该字符串写入消息队列。请注意,必须设置流的Filename属性才能对其进行初始化。不支持二进制流。
  • %SetMsgId()-给定一个字符串,此方法使用该字符串作为发送的下一条消息的消息ID。
  1. 检查调用的方法返回的值。
  2. 检索完消息后,调用Connection对象的%Close()方法以释放动态链接库的句柄。

示例1:SendString()

下面的类方法使用队列管理器QM_antigua和名为 S_antigua的队列通道向队列mqtest发送一条简单的字符串消息。通道使用TCP传输,IBM WebSphere MQ服务器运行在名为Antigua的机器上,并侦听端口1401。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
///Method returns reason code from IBM WebSphere MQ
ClassMethod SendString() As %Integer
{
 Set send=##class(%Net.MQSend).%New()
 Set queue="mqtest"
 Set qm="QM_antigua"
 Set chan="S_antigua/TCP/antigua(1414)"
 Set logfile="c:\mq-send-log.txt"

 Set check=send.%Init(queue,qm,chan,logfile)
 If 'check  Quit send.%GetLastError()
 
 //send a unique message
 Set check=send.%Put("This is a test message "_$h)

 If 'check  Quit send.%GetLastError()
 Quit check
}

示例2:SendCharacterStream()

下面的类方法发送文件字符流的内容。它使用的队列与上一个示例中使用的队列相同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
///Method returns reason code from IBM WebSphere MQ
ClassMethod SendCharacterStream() As %Integer
{
 Set send=##class(%Net.MQSend).%New()
 Set queue="mqtest"
 Set qm="QM_antigua"
 Set chan="S_antigua/TCP/antigua(1414)"
 Set logfile="c:\mq-send-log.txt"

 Set check=send.%Init(queue,qm,chan,logfile)
 If 'check  Quit send.%GetLastError()
 
 //initialize the stream and tell it what file to use
 Set longmsg=##class(%FileCharacterStream).%New()
 Set longmsg.Filename="c:\input-sample.txt"
 
 Set check=send.%PutStream(longmsg)

 If 'check  Quit send.%GetLastError()
 Quit check
}

示例3:从终端发送消息

以下示例显示了向IBM WebSphere MQ队列发送消息的终端会话。这只能在配置了IBM WebSphere MQ客户端的计算机上运行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Set MySendQ = ##class(%Net.MQSend).%New()

Do MySendQ.%Init("Q_1", "QM_1","QC_1/TCP/127.0.0.1(1401)","C:\mq.log")

Do MySendQ.%Put("Hello from tester")

Set MyRecvQ =##class(%Net.MQRecv).%New()

Do MyRecvQ.%Init("Q_1", "QM_1","QC_1","C:\mq.log")

Do MyRecvQ.%Get(.msg, 10000)

Write msg,!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
IBM WebSphere MQ检索邮件
如果在使用IBM WebSphere MQ的InterSystems IRIS接口时遇到问题,应该首先确定客户端是否安装正确并且可以与服务器通信。要执行这样的测试,可以使用IBM WebSphere MQ提供的示例程序。可执行文件位于IBM WebSphere MQ客户端的bin目录中。
用户7741497
2022/07/04
2K0
IBM WebSphere MQ 7.5基本用法
一、下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Next即可(注:windows上安装时,会询问是否域环境,初次学习时,为简单起见,建议选择No) 安装完成后,MQ的Bin目录会自动添加到环境变量Path中,以后就可以直接用Dos命令行窗口操作(当然,也可以用图形化GUI方式通过IBM WebSphere MQ Explorer来管理) 注:安装时,强烈建议用管理
菩提树下的杨过
2018/01/24
3.9K0
IBM WebSphere MQ 7.5基本用法
IBM WebSphere MQ 系列(三)配置和使用WebSphere MQ
配置和使用WebSphere MQ A.设置环境变量   在shell中执行MQ的控制命令:     ctrmqm     strmqm   若识别这些命令,则说明PATH环境变量已配置好了;   若提示找不到命令,则说明需配置Linux环境变量,指定MQ的bin路径到PATH:      可选择修改系统的环境变量(/etc/profile文件,对全部用户可见),      或只修改用户mqadmin的环境变量(/var/mqm/.bash_profile,只对当前用户可见。     下面列出前者的修改方式
Java学习123
2018/05/16
6.8K0
IBM MQ运维使用手册
操作系统版本:SUSE Linux Enterprise Server 10 SP4    32bit
loong576
2019/09/10
8.3K0
IBM MQ运维使用手册
IBM WebSphere MQ 系列(四) 使用MQ命令
结合上节使用到的MQ命令,本节系统阐述MQ的命令。 一、MQ命令集合     MQ命令集合有三种命令:控制命令、MQSC(MQ脚本命令)和PCF(Programmable Command Formats,可编程的命令格式)。 二、控制命令     控制命令:用于管理 WebSphere MQ的系统配置,包括队列管理器、侦听器、通道、日志的管理。     例如:创建队列管理器(crtmqm),启动队列管理器(strmqm),启动用于运行队列管理器MQSC命令的控制台(runmqsc)、运行通道(runmqch
Java学习123
2018/05/16
5K0
IBM MQ运维使用手册
操作系统版本:SUSE Linux Enterprise Server 10 SP4    32bit
星哥玩云
2022/07/20
3.9K0
IBM MQ运维使用手册
WebSphere MQ基础命令
基础概念 对于MQ,我们需要知道4个名词:队列管理器、队列、消息、通道;对于编程设计人员,通常更关心消息和队列,对于维护管理人员,通常 会更关心队列管理器和通道。如果我们把队列管理器比作是数据库,那么队列就是其中的一张表,消息就是表中的一条记录。 队列:我们可以简单地把队列看成一个容器,用于存放消息。 队列管理器:队列管理器构建了独立的 MQ 的运行环境,它是消息队列的管理者,用来维护和管理消息队列。 消息:MQ中的最小对象;默认情况下,消息缺省可以达到 4MB。消息可以分成持久消息和非持久消息。所谓“持久
Java学习123
2018/05/16
2.8K0
IBM WebSphere MQ 系列(一)基础知识
一、中间件    中间件处于应用软件和系统软件之间,是一种以自己的复杂换取企业应用简单化的可复用的基础软件。    在中间件产生以前,应用软件直接使用操作系统、网络协议和数据库等开发,开发者不得不面临许多很棘手的问题,如操作系统的多样性,繁杂的网络程序设计和管理,复杂多变的网络环境,数据分散处理带来的不一致性,性能和效率、安全问题等等。这些问题与用户的业务没有直接关系,但又必须解决,耗费了大量有限的时间和精力。于是,有人提出将应用软件所要面临的共性问题进行提炼、抽象,在操作系统之上再形成一个可复用的部分,供
Java学习123
2018/05/16
5.5K0
分布式消息中间件 — MQ
消息队列(Message Queue,简称 MQ)是阿里巴巴集团中间件技术部自主研发的专业消息中间件。用于保证异构应用之间的消息传递。应用程序通过MQ接口进行互连通信,可以不必关心网络上的通信细节,从而将更多的注意力集中于应用本身。
AI乔治
2018/06/20
1.6K0
IBMMQ应用实例
IBMMQ作为一种高端的收费MQ产品,主要用于一些对消息时效性和安全性都很高的企业。
软件架构师Michael
2025/07/22
820
配置IBM WEBSPHERE MQ触发器
配置IBM WEBSPHERE MQ触发器 2007-11-15 创建 一般设置MQ触发器的目的有两种, 一是自动启动发送端通道, 二是监视队列消息, 一旦发现新的消息, 则利用触发器启动相应的处理进程 如果是利用触发器自动启动发送端通道, 使用方法1, 如果是利用触发器启动用户进程, 使用方法2 方法1 A 在传输通道上设置触发器, 打开触发器控制, 类型为"第一个" B 初始队列为SYSTEM.CHANNEL.INITQ, 该队列为MQ专用的通道启动队列, 不需要手工启动其触发监视器 C 触发器数据为发
Java学习123
2018/05/16
2K0
消息中间件-MQ
中间件是计算机软件,它为操作系统以外的软件应用程序提供服务。它可以被描述为“软件粘合剂”。
叉叉敌
2021/12/06
1.1K0
消息中间件-MQ
MQ消息中间件(工作+面试)
AMQP协议介绍 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。 AMQP的主要特征是面向消息、
Java帮帮
2018/03/15
2.5K0
MQ消息中间件(工作+面试)
IBM Websphere Message Broker(MB) 教程系列-(1) 在Fedora
1  安装MQ       1) MB的先决条件是安装正确的MQ, 目前最新的8.0.0.0版本的MB如果想在安装时正确的检测出MQ版本,需要安装MQ 7.0.1版本,最新版本无法检测出,当然还是可以安装完成MB 8.0.0.0并且运行良好,如果你在安装完MB后无法使用,不需要找MQ版本的问题,当然不管哪个版本,你得确保MQ安装正确。 注意:Fedora 17是64位版本,32位版本有些地方不一样,请自行修改.      2) 修改系统共享段大小shmmax       修改 /etc/sysctl.con
Java学习123
2018/05/16
1.6K0
IBM MQ常用命令
创建队列管理器 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 QmgrName MQSeries命令 定义死信队列 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。 创建接收方通道 DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE 创建服务器连接通道 DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE 显示队列的所有属性 DISPLAY QUEUE(QNAME) [ALL] 显示队列的所选属性 DISPLAY QUEUE(QNAME) DESCR GET PUT DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH 显示队列管理器的所有属性 DISPLAY QMGR [ALL] 显示进程定义 DISPLAY PROCESS(PRONAME) 更改属性 ALTER QMGR DESCR(‘NEW DESCRIPTION’) ALTER QLOCAL(QNAME) PUT(DISABLED) ALTER QALIAS(QNAME) TARGQ(TARGQNAME) 删除队列 DELETE QLOCAL(QNAME) DELETE QREMOTE(QRNAME) 清除队列中的所有消息 CLEAR QLOCAL(QNAME) 常用补充命令 显示队列管理器 dspmq 显示文件名 dspmqfls 启动本地队列管理器 strmqm 结束本地队列管理器 endmqm 启动通道启动进程 runmqchi/runmqchl
HUC思梦
2020/09/03
1.9K0
MQ 概念介绍 / 配置以及原理 简书
Message Queue, 就是消息队列,MQ 经常会作为多系统当中的网络消息传输。是一种应用程序对应用程序的通信方式。也是WEB服务器的一种重要的第三方软件。
EXI-小洲
2022/12/13
1.6K0
MQ 概念介绍 / 配置以及原理 简书
面试官:消息队列是怎么演进的?
上一篇我们用一个秒杀案例探讨了我们为什么需要消息队列。今天我们来回顾一下消息队列的发展历史。
小林coding
2023/10/28
4790
面试官:消息队列是怎么演进的?
消息中间件Rabbit Mq的了解与使用
MQ(消息队列)作为现代比较流行的技术,在互联网应用平台中作为中间件,主要解决了应用解耦、异步通信、流量削锋、服务总线等问题,为实现高并发、高可用、高伸缩的企业应用提供了条件。
sucl
2019/08/07
8430
消息中间件Rabbit Mq的了解与使用
RabbitMQ消息中间件从入门到高级(一)
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
用户1212940
2022/04/13
6720
RabbitMQ消息中间件从入门到高级(一)
Message Queue消息队列基本原理
如果需要和新的系统建立通信或删除已建立的通信,都需要修改代码,这种方案显然耦合度很高。
Java宝典
2021/01/14
3.4K0
Message Queue消息队列基本原理
相关推荐
IBM WebSphere MQ检索邮件
更多 >
LV.8
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验