前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IBM WebSphere MQ检索邮件

IBM WebSphere MQ检索邮件

作者头像
用户7741497
发布2022-07-04 16:00:46
1.8K0
发布2022-07-04 16:00:46
举报
文章被收录于专栏:hml_知识记录

IBM WebSphere MQ检索邮件

检索邮件

要检索邮件,请执行以下操作:

  1. 按照“创建连接对象”中的说明创建连接对象。在这种情况下,请创建%Net.MQRecv的实例。Connection对象有一个消息队列,可以从中检索消息。
  2. 根据需要调用以下方法:
  • %Get()-通过引用返回字符串消息作为第一个参数。
  • %GetStream()-给定初始化的文件字符流,此方法从队列中检索消息,并将其放入与该流关联的文件中。请注意,必须设置流的Filename属性才能对其进行初始化。不支持二进制流。
  1. 检查调用的方法返回的值。请参阅“获取错误代码”。请记住,当队列为空时,IBM WebSphere MQ返回2033
  2. 检索完消息后,调用Connection对象的%Close()方法以释放动态链接库的句柄。

示例1:ReceiveString()

下面的类方法从mqtest队列检索消息。

代码语言:javascript
复制
///Method returns string or null or error message
ClassMethod ReceiveString() As %String
{
 Set recv=##class(%Net.MQRecv).%New()
 Set queue="mqtest"
 Set qm="QM_antigua"
 Set chan="S_antigua/TCP/antigua(1414)"
 Set logfile="c:\mq-recv-log.txt"
 
 Set check=recv.%Init(queue,qm,chan,logfile)
 If 'check  Quit recv.%GetLastError()

 Set check=recv.%Get(.msg)
 If 'check {
     Set reasoncode=recv.%GetLastError()
     If reasoncode=2033 Quit ""
     Quit "ERROR: "_reasoncode
     }
 
 Quit msg
}

示例2:ReceiveCharacterStream()

以下方法可以检索更长的消息,因为它使用%GetStream()

代码语言:javascript
复制
/// Method returns reason code from IBM WebSphere MQ
ClassMethod ReceiveCharacterStream() As %Integer
{
 Set recv=##class(%Net.MQRecv).%New()
 Set queue="mqtest"
 Set qm="QM_antigua"
 Set chan="S_antigua/TCP/antigua(1414)"
 Set logfile="c:\mq-recv-log.txt"

 Set check=recv.%Init(queue,qm,chan,logfile)
 If 'check  Quit recv.%GetLastError()
 
 //initialize the stream and tell it what file to use
 //make sure filename is unique we can tell what we received
 Set longmsg=##class(%FileCharacterStream).%New()
 Set longmsg.Filename="c:\mq-received"_$h_".txt"

 Set check=recv.%GetStream(longmsg)

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

更新消息信息

%Net.MQSend%Net.MQRecv类还提供以下方法:

%CorId()

(通过引用)更新上次读取的邮件的关联ID。

%ReplyQMgrName()

(通过引用)更新上次读取的消息的回复队列管理器名称。

%ReplyQName()

(通过引用)更新上次读取的消息的回复队列名称。

Troubleshooting

如果在使用IBM WebSphere MQ的InterSystems IRIS接口时遇到问题,应该首先确定客户端是否安装正确并且可以与服务器通信。要执行这样的测试,可以使用IBM WebSphere MQ提供的示例程序。可执行文件位于IBM WebSphere MQ客户端的bin目录中。

以下步骤介绍如何在Windows上使用这些示例程序。在其他操作系统上,细节可能会有所不同;请参考IBM文档并检查您的客户端中存在的文件的名称。

  1. 创建一个名为MQSERVER的环境变量。它的值的格式应该是channel_name/Transport/server,其中channel_name是要使用的通道的名称,Transport是指示要使用的传输的字符串,而server是服务器的名称。例如:S_Antigua/TCP/Antigua
  2. 在命令行中,输入以下命令:
代码语言:javascript
复制
amqsputc queue_name queue_manager_name

其中,QUEUE_NAME是要使用的队列的名称,QUEUE_MANAGER_NAME是队列管理器的名称。例如:

代码语言:javascript
复制
amqsputc mqtest QM_antigua

如果amqsputc命令无法识别,请确保已更新PATH环境变量以包括IBM WebSphere MQ客户端的bin目录。

  1. 应该会看到几行代码,如下所示:
代码语言:javascript
复制
Sample AMQSPUT0 start
target queue is mqtest
  1. 现在可以发送消息了。只需键入每条消息,然后在每条消息后按Enter键即可。例如:
代码语言:javascript
复制
sample message 1
sample message 2
  1. 发送完邮件后,按两次Enter键。然后,将看到如下所示的行:
代码语言:javascript
复制
Sample AMQSPUT0 end
  1. 要完成此测试,我们将检索发送到队列的消息。在命令行中键入以下命令:
代码语言:javascript
复制
amqsgetc queue_name queue_manager_name

其中,QUEUE_NAME是要使用的队列的名称,QUEUE_MANAGER_NAME是队列管理器的名称。例如:

  1. 然后,应该看到一个起始行,后跟之前发送的消息,如下所示:
代码语言:javascript
复制
Sample AMQSGET0 start
message <sample message 1>
message <sample message 2>
  1. 此示例程序短暂等待接收任何其他消息,然后显示以下内容:
代码语言:javascript
复制
no more messages
Sample AMQSGET0 end

如果测试失败,请参考IBM文档。问题的可能原因包括以下几个方面:

  • 安全问题
  • 队列定义不正确
  • 队列管理器未启动

本文系转载,前往查看

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

本文系转载前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IBM WebSphere MQ检索邮件
  • 检索邮件
  • 更新消息信息
    • %CorId()
      • %ReplyQMgrName()
        • %ReplyQName()
        • Troubleshooting
        相关产品与服务
        消息队列 CMQ
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档