使用 WebSphere MQ 检索消息
通过 WebSphere® MQ,程序可以读取或接收消息。 读取和接收操作都会在队列的头返回消息。 但是,读操作不会从队列中除去消息,而接收操作会除去消息。
使用接收操作检索的消息只能检索一次,而使用读操作检索的消息允许多次检索同一消息。
以下 SQL 语句在缺省服务和策略指定的队列头读取消息。 SQL 语句返回 VARCHAR (32000) 字符串。 如果没有可读取的消息,那么将返回空值。 因为 MQREAD 不会更改队列,所以您不需要使用 COMMIT 语句。
VALUES MQREAD()
以下 SQL 语句导致将队列的内容作为结果集返回。 表函数的结果表 T 由队列中的所有消息 (由缺省服务定义) 以及有关这些消息的元数据组成。 具体化结果表的第一列是消息本身,其余列包含元数据。 SELECT 语句返回消息和元数据。
SELECT T.*
FROM TABLE ( MQREADALL() ) AS T;
以下语句仅返回消息。 表函数的结果表 T 由队列中的所有消息 (由缺省服务定义) 以及有关这些消息的元数据组成。
SELECT T.MSG
FROM TABLE ( MQREADALL() ) AS T;
以下 SQL 语句在队列的头接收 (除去) 消息。 SELECT 语句返回 VARCHAR (32000) 字符串。 由于此 MQRECEIVE 函数在事务下运行,因此 COMMIT 语句可确保从队列中除去消息。 如果没有可检索的消息,那么将返回空值,并且队列不会更改。
VALUES MQRECEIVE()
COMMIT;
假定您有一个带有单个 VARCHAR (32000) 列的 MESSAGES 表。 以下 SQL INSERT 语句将缺省服务队列中的所有消息插入到 MESSAGES 表中:
INSERT INTO MESSAGES
SELECT T.MSG
FROM TABLE ( MQRECEIVEALL() ) AS T;
COMMIT;