“回传”样本程序
“回传”样本程序将消息从消息队列回传到应答队列。
请参阅 多平台上的样本程序中演示的功能部件 ,以获取这些程序的名称。
这些程序旨在作为触发程序运行。
在 IBM i AIX®, Linux®, and Windows 系统上,其唯一输入是包含目标队列和队列管理器的名称的 MQTMC2 (触发器消息) 结构。 COBOL 版本使用缺省队列管理器。
在 IBM i上,要使触发过程起作用,请确保要使用的 Echo 样本程序由到达队列 SYSTEM.SAMPLE.ECHO。 要执行此操作,请在进程定义 SYSTEM.SAMPLE.ECHOPROCESS 的 ApplId 字段中指定您要使用的“回传”样本程序的名称。 (为此,可以使用 CHGMQMPRC 命令; 有关详细信息,请参阅 更改 MQ 进程 (CHGMQMPRC)。) 样本队列具有触发器类型 FIRST,因此,如果在运行“请求”样本之前队列中已存在消息,那么您发送的消息将不会触发“回传”样本。
在正确设置了该定义后,首先在一个作业中启动 AMQSERV4,然后在另一个作业中启动 AMQSREQ4。 您可以使用 AMQSTRG4 代替 AMQSERV4,但作业提交可能出现延迟,因而导致不太容易关注到当前发生的情况。
使用“请求”样本程序向队列 SYSTEM.SAMPLE.ECHO 发送消息。 “回传”样本程序将向请求消息中指定的应答队列发送包含请求消息数据的应答消息。
设计“回传”样本程序
该程序将打开在启动时传递的触发器消息结构中指定的队列。 (为清楚起见,我们将其称为请求队列。) 该程序将使用 MQOPEN 调用打开该队列以获取共享输入。
该程序将使用 MQGET 调用从此队列中除去消息。 此调用将使用 MQGMO_ACCEPT_TRUNCATED_MSG、MQGMO_CONVERT 和 MQGMO_WAIT 选项,并将等待时间间隔设置为 5 秒。 该程序将测试每条消息的描述符以判断其是否为请求消息;如果不是,那么该程序会丢弃该消息并显示一条警告消息。
对于每行输入,该程序随后将文本读入缓冲区中,并使用 MQPUT1 调用将包含此行文本的请求消息放入应答队列中。
如果 MQGET 调用失败,那么该程序会将报告消息放入应答队列中,并将消息描述符的 Feedback 字段设置为 MQGET 返回的原因码。
如果请求队列中未剩下任何消息,那么该程序将关闭此队列并断开与队列管理器的连接。
在 IBM i上,程序还可以响应从 IBM MQ for IBM i以外的平台发送到队列的消息,尽管没有为此情境提供样本。 要使 ECHO 程序正常运行:- 编写一个程序,并正确指定 Format、Encoding 和 CCSID 参数以发送文本请求消息。
“回传”程序将请求队列管理器执行消息数据转换(如果需要)。
- 如果您编写的程序没有为应答提供类似的转换,请在 IBM MQ for IBM i 发送通道上指定 CONVERT (*YES)。