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(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)

这是我的问题:

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

最佳答案

好的,让我们一次拿走这些。

I thought, all the trigger messages will be processed by trigger monitor script. If we don't configure it on the INITQ, process which is associated with the queue will not run. Is that correct?

如果我明白你在问什么,那就是如果启动队列上没有任何监听,进程是否被触发。那是对的。应用程序队列必须设置 TRIGGER 并指定 INITQ 值。指定的启动队列必须有一个打开的输入句柄,以便 MQ 格式化和放置触发消息。

If Yes, Our trigger monitor is not running on the INITQ : TRIG.INITQ. do we must run the trigger monitoring on the INITQ too?

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

When we are configuring the transmission queues, for triggering, we have defined the trigger data and process definitions. Though we didn't configure the trigger monitor on the initiation queue, channel got run since we have runmqchi on the INITQ. So runmqtrm and runmqchi function similarly?

channel 启动器比触发监视器更能容忍草率的配置。从 channel 定义很容易计算出它使用哪个传输队列。因此 MQ 认为,如果管理员定义了一个类型为 XMITQ 的队列,并将其设置为 TRIGGER,那么其意图必须是启动一个 channel 。然后它从 channel 定义向后工作以发现哪个 channel 与该队列相关联。

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

In here, we have the triggering for EVERY message and queue depth high event. In both the cases, trigger message will be placed to the same INITQ. So, how do we know what kind of alert we are receiving?

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

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


有关触发的更多信息,包括围绕有用应用程序构建的迷你教程和实现它的示例脚本,请参阅 Mission:Messaging: Easing administration and debugging with circular queues

关于ibm-mq - 触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543386/

相关文章:

message - 故障转移后进行中消息的 WebSphere MQ 恢复

sql - 在ESQL中验证结果

java - 消息重新传递 ibm mq

ssl - SSL使用.net mq客户端SSLV3连接到MQ?

linux - 在 Linux 中使用 WebSphere MQ 的默认 CCSID 连接到 Windows 中的客户端应用程序

java - MQ JMS 消息 ID 不返回文本消息以及如何以正确的格式编写 MQ JMSCorrelationID

c++ - Websphere MQ - 获取时出现错误,原因代码为 2042

ibm-mq - 获取原因代码 2035 MQRC_NOT_AUTHORIZED 且 channel 身份验证记录已禁用

java - Spring JmsTemplate 的守护线程在停止 tomcat 应用程序后仍保持 Activity 状态

activemq - 我们可以纯粹使用非 Websphere MQSeries 软件与远程 Websphere MQSeries 通话吗