Ibm mq 事件触发
我有如下队列定义:Ibm mq 事件触发,ibm-mq,Ibm Mq,我有如下队列定义: DEFINE QLOCAL(TRIG.QLOCAL) + DESCR('Example Queue for Triggering') + DEFPRTY(0) + DEFSOPT(SHARED) + GET(ENABLED) + MAXDEPTH(5000) + MAXMSGL(4194304) + MSGDLVSQ(PRIORITY) + PUT(
DEFINE QLOCAL(TRIG.QLOCAL) +
DESCR('Example Queue for Triggering') +
DEFPRTY(0) +
DEFSOPT(SHARED) +
GET(ENABLED) +
MAXDEPTH(5000) +
MAXMSGL(4194304) +
MSGDLVSQ(PRIORITY) +
PUT(ENABLED) +
QDEPTHHI(80) +
QDPHIEV(ENABLED)+
RETINTVL(999999999) +
TRIGTYPE(EVERY) +
PROCESS(TRIG.PROCESS) +
INITQ(TRIG.INITQ) +
USAGE(NORMAL) +
REPLACE
我定义了如下流程:
DEFINE PROCESS(TRIG.PROCESS) APPLTYPE(UNIX) +
APPLICID(/appn/sy31/QdepthHiAlert.sh) +
ENVRDATA(' ') +
USERDATA(' ')
DESCR('PROCESS FOR TESTING QDEPTH HIGH EVENT') +
REPLACE
SERVICE(TRIGGER_MONITOR) STATUS(RUNNING)
PID(49610840) SERVTYPE(SERVER)
CONTROL(QMGR) STARTCMD(/usr/bin/runmqtrm)
STARTARG(-m PACOHB20 -q SYSTEM.DEFAULT.INITIATION.QUEUE)
我有一个触发器监视器作为服务运行,如下所示:
DEFINE PROCESS(TRIG.PROCESS) APPLTYPE(UNIX) +
APPLICID(/appn/sy31/QdepthHiAlert.sh) +
ENVRDATA(' ') +
USERDATA(' ')
DESCR('PROCESS FOR TESTING QDEPTH HIGH EVENT') +
REPLACE
SERVICE(TRIGGER_MONITOR) STATUS(RUNNING)
PID(49610840) SERVTYPE(SERVER)
CONTROL(QMGR) STARTCMD(/usr/bin/runmqtrm)
STARTARG(-m PACOHB20 -q SYSTEM.DEFAULT.INITIATION.QUEUE)
以下是我的问题:
INITQ
上配置它,与队列关联的进程将不会运行。对吗INITQ(TRIG.INITQ)
上运行。我们是否也必须在INITQ
上运行触发器监视器system.channel.initiation.queue上有runmqchi
。那么runmqtrm
和runmqchi
的功能类似吗
INITQ
。那么,我们如何知道我们收到了什么样的警报呢好的,让我们一次拿一个 我想,所有的触发器消息都将由触发器处理 监视脚本。如果我们不在INITQ上配置它,那么哪个进程 与队列关联的将不会运行。对吗 如果我理解您的问题,那就是如果启动队列中没有任何侦听内容,是否会启动进程。这是正确的。应用程序队列必须设置
TRIGGER
并指定INITQ
值。指定的启动队列必须具有打开的输入句柄,以便MQ格式化和放置触发器消息
如果是,我们的触发器监视器没有在INITQ:TRIG.INITQ上运行。
我们是否也必须在INITQ上运行触发器监视
对。队列的INITQ
是QMgr放置任何触发消息的位置。除非启动队列上有一个打开的输入句柄,否则QMgr不会放置触发器消息,并且该句柄最好来自触发器监视器,否则它不会工作
当我们配置传输队列时,为了触发,我们
已定义触发器数据和流程定义。虽然我们
未在启动队列通道上配置触发器监视器
自从我们在INITQ上运行mqchi后,就开始运行了。所以runmqtrm和runmqchi
功能相似
通道启动器比触发器监视器更能容忍草率的配置。从通道定义很容易计算出它使用的传输队列。因此,MQ指出,如果管理员定义了类型为XMITQ
的队列,将其设置为TRIGGER
,那么目的必须是启动通道。然后,它从通道def向后工作,以发现哪个通道与该队列关联
但是对于runmqtrm
,没有这样的安全假设。您必须将队列的INITQ
和PROCESS
属性中的点连接到触发器监视器,侦听指定的INITQ
和关联的进程,正确读取触发器消息,然后按预期处理队列
在这里,每个消息都有触发,队列深度也很高
事件在这两种情况下,触发器消息将放在相同的位置
INITQ。那么,我们如何知道我们收到了什么样的警报呢
这是两件不同的事情。队列上只能指定一种触发类型,它是第一个
、深度
或每一个
中的一种。您还可以指定当队列深度超过某个阈值时,QMgr将向事件队列(而不是启动队列)发出事件消息
这两件事是相关的,但仪器的类型完全不同。触发仪表设计用于在特定条件下启动过程。队列深度事件旨在向侦听事件队列的监视代理提供实时操作信息
有关触发的更多信息,包括围绕一个有用的应用程序构建的迷你教程和实现该应用程序的示例脚本,请参见,感谢您的详细解释。读完这篇文章后,我又想起了两个问题。1.
runmqchi
是否可以反向工作?每个触发器消息都有导致触发的队列的名称,并且需要在其负载中调用该进程,对吗?如果是这样,为什么它需要回溯?2.对于触发器类型为深度的队列
。当CURDEPTH
跨越MAXDEPTH
的80%时,它将生成queue\u depth\u high
事件。如果队列已满,它会生成queue\u depth\u high
或queue\u full
事件吗?如果它生成queue_full
事件,我们如何区分高_深度和完整事件?“我们如何区分高_深度和完整事件?”MQCFH中的原因码对于QDepth high事件为2224,对于QFull事件为2053。请参阅:通道启动器不再需要定义进程,也不再需要队列的process
属性中的通道名称。当XmitQ被触发时,runmqchi
必须通过将通道中指定的XmitQ
值与被触发的队列名称相匹配来确定启动哪个通道。然而,对于IBM来说,让runmqchi
这样做要比对客户定义流程提出严格要求容易得多,这样他们得到的PMR就更少了。“感谢您的详细解释。”详细程度反映出这是一个由4部分组成的问题。我别无选择(不客气!)