首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件触发

事件触发
EN

Stack Overflow用户
提问于 2015-07-21 15:28:22
回答 1查看 857关注 0票数 2

我有一个队列定义如下:

代码语言:javascript
复制
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 

我把这个过程定义如下:

代码语言:javascript
复制
DEFINE PROCESS(TRIG.PROCESS) APPLTYPE(UNIX) +
       APPLICID(/appn/sy31/QdepthHiAlert.sh) +
       ENVRDATA(' ') +
       USERDATA(' ') 
       DESCR('PROCESS FOR TESTING QDEPTH HIGH EVENT') +
       REPLACE

我有一个触发器监视器作为服务运行,如下所示:

代码语言:javascript
复制
   SERVICE(TRIGGER_MONITOR)                STATUS(RUNNING)
   PID(49610840)                           SERVTYPE(SERVER)
   CONTROL(QMGR)                           STARTCMD(/usr/bin/runmqtrm)
   STARTARG(-m PACOHB20 -q SYSTEM.DEFAULT.INITIATION.QUEUE)

以下是我的问题:

  1. 我想,所有的触发消息都将由触发器监控器脚本处理。如果我们不在INITQ上配置它,那么与队列相关联的进程将不会运行。对吗?
  2. 如果是,则触发器监视器不在队列的INITQ(TRIG.INITQ)上运行。我们也必须在INITQ上运行触发器监视器吗?
  3. 当我们配置用于触发的传输队列时,我们已经定义了触发器数据和进程定义。虽然我们没有在启动队列上配置触发器监视器,但是通道是启动的,因为我们在runmqchi上有system.channel.initiation.queue。那么runmqtrmrunmqchi的作用类似吗?
  4. 在这里,我们有触发每个消息和队列深度高的事件。在这两种情况下,触发器消息将被放置到同一个INITQ中。那么,我们怎么知道我们收到了什么样的警报呢?
EN

回答 1

Stack Overflow用户

发布于 2015-07-21 16:05:02

好的,我们一次拿一个。

我想,所有的触发消息都将由触发器监控器脚本处理。如果我们不在INITQ上配置它,那么与队列相关联的进程就不会运行。对吗?

如果我理解您要问的是什么,那就是如果启动队列中没有监听内容,进程是否被触发。这是正确的。应用程序队列必须设置TRIGGER并指定INITQ值。指定的初始化队列必须有一个打开的输入句柄,以便MQ格式化和放置触发消息。

如果是,我们的触发器监视器不在INITQ : TRIG.INITQ上运行。我们也必须在INITQ上运行触发器监视吗?

是。队列的INITQ是QMgr放置任何触发消息的地方。除非在启动队列上有一个打开的输入句柄,否则QMgr不会放置触发器消息,而且该句柄最好是来自触发器监视器--它不能工作。

当我们为触发配置传输队列时,我们已经定义了触发器数据和进程定义。虽然我们没有在启动队列上配置触发器监视器,但由于INITQ上有runmqchi,所以通道运行了。所以runmqtrm和runmqchi函数类似吗?

通道启动程序比触发器监视器更宽容草率的配置。很容易从它所使用的传输队列的信道定义中计算出。因此MQ指出,如果管理员定义了一个类型为XMITQ的队列,将其设置为TRIGGER,那么其目的必须是启动一个通道。然后,它从通道防御向后工作,以发现哪个通道与该队列相关联。

runmqtrm并没有这样的安全假设。必须将队列的INITQPROCESS属性中的点连接到触发器监视器,侦听指定的INITQ和关联进程,正确读取触发器消息,然后按预期处理队列。

在这里,我们有触发每个消息和队列深度高的事件。在这两种情况下,触发消息将被放置到相同的INITQ。那么,我们怎么知道我们收到了什么样的警报呢?

这是两件不同的事情。只能在队列上指定一种类型的触发,它是FIRSTDEPTHEVERY之一。您还可以指定,当队列深度超过某个阈值时,QMgr将向事件队列(而不是启动队列)发出事件消息。

这两件事是相关的,但完全不同类型的仪器。触发仪器的设计是为了在特定条件下启动进程。队列深度事件旨在将实时操作信息提供给侦听事件队列的监视代理。

有关触发的更多信息,包括围绕有用的应用程序构建的迷你教程和实现它的示例脚本,请参见http://ibm.co/huFW3R

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31543386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档