【问题标题】:Will MQSC define queue command ever delete or corrupt messages?MQSC 定义队列命令是否会删除或损坏消息?
【发布时间】:2012-01-13 18:50:01
【问题描述】:

在 WebSphere MQ 6 中,我想编写创建新队列的脚本。但是队列可能已经存在,我需要脚本是幂等的。

我可以使用命令documented here 创建队列。例如:

DEFINE QREMOTE(%s) RNAME(%s) RQMNAME(%s) XMITQ(%s) DEFPSIST(YES) REPLACE

DEFINE QLOCAL(%s) DESCR(%s) DEFPSIST(YES) REPLACE

REPLACE 关键字可确保在队列已存在时创建不会失败。

我已经使用现有的非空队列对此进行了测试,似乎没有任何消息丢失。然而,这还不足以证明。如果我对现有队列运行DEFINE Q... REPLACE 命令,我需要确定不会丢失或损坏任何消息。现有队列甚至可能在当时参与事务。

任何人都可以确认或否认这种行为吗?

【问题讨论】:

    标签: websphere message-queue ibm-mq


    【解决方案1】:

    如果对象打开,带有REPLACEDEFINE 命令会失败。因此,您无法重新定义具有待处理事务的队列。 manual states 表示队列中的所有消息都在DEFINEREPLACE 期间保留,这意味着不会丢失消息完整性。您可以ALTER 使用FORCE 选项的队列来更改当前打开的队列,如here 所述。这也将消息保留在队列中而不会丢失完整性。

    DEFINE 命令不会影响队列中的消息。您可能会注意到的唯一影响是,例如,如果您将队列从 FIFO 更改为 PRIORITY,反之亦然。这只会更改队列中 new 消息的索引和排序,不会影响现有消息。同样,更改影响句柄的队列属性仅在下次打开队列时生效。例如,将BIND(ONOPEN) 更改为BIND(NOTFIXED)

    我为 WMQ 集群提供的 recommending for a while 之一是将队列定义拆分为构建时和运行时属性。例如:

    DEFINE QLOCAL (APP.FUNCTION.SUBFUNCTION.QA) +
           GET(DISABLED) +
           PUT(DISABLED) +
           NOTRIGGER +
           NOREPLACE
    ALTER  QLOCAL (APP.FUNCTION.SUBFUNCTION.QA) +
           DESCR('APP service queue for QA') +
           DEFPSIST(NO) +
           BOTHRESH(5) +
           BOQNAME('APP.FUNCTION.BACKOUT.QA') +
           CLUSTER('DIV_QA') +
           CLUSNL(' ') +
           DEFBIND(NOTFIXED)
    

    在这种情况下,GETPUTTRIGGER 属性被视为运行时属性,并且仅在首次定义队列时设置。这允许您在集群中定义一个新队列,并在您准备打开应用程序之前将其禁用。在脚本的后续运行中,这些属性永远不会更改,因为该语句使用NOREPLACE。因此,一旦您在队列中启用GETPUT,这些属性(以及应用程序的功能)就不会受到后续脚本运行的干扰。

    ALTER 然后处理所有被视为构建时的属性。例如,如果您更改描述,您希望它在下一次脚本运行中被拾取。因为我们在上一步中定义了队列(或者该步骤因队列存在而失败),所以我们知道 ALTER 会起作用。

    集群成员资格等任何属性是构建时还是运行时由您决定。这只是管理员通过重新运行 MQSC 脚本无意中破坏了某些情况的许多案例中的一个示例。

    但是为了更准确地回答您的问题,中断的事情是因为有人重置了运行时属性,例如 GET(DISABLED) (如果应用程序尝试在禁用获取后对该队列执行 GET) 而不是因为更改导致队列、消息或事务的完整性失败。

    【讨论】:

    • 您所有的MQ问题都属于我们。 :-)
    猜你喜欢
    • 2014-02-24
    • 2017-07-22
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2018-08-26
    相关资源
    最近更新 更多