- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
WebsphereMQ设计篇第十二章触发(Trigger)讲述
第十二章 触发 (Trigger)
原理
WebSphere MQ中的本地队列或模型队列上可以设置消息触发器 (Trigger),到达的消息在优先级、数量和到达方式上如果满足预先设定的条件,则会有触发消息自动生成,放入指定的初始化队列,再由触发监控器 (Trigger Monitor) 将触发消息读出,并根据触发消息的内容启动相应的应用程序。一般说来,该程序应该首先从本地队列中将应用消息读出并进行应用处理。
其中,本地队列、初始化队列、进程定义是事先设置好的WebSphere MQ对象,触发监控器也是处于运行状态的,即在初始化队列上等待触发消息,一旦读到触发消息,则可以立即启动MQGET应用程序,所以MQGET应用程序是被触发启动的,通常情况下是触发监控器的子进程。所有这些都只是设定了“连锁反应”中的各个环节,而触动这个机关的是应用消息的到达。
WebSphere MQ 中与消息触发相关的参数如下:
对象属性缺省值可取值说明队列管理器TRIGINT999,999,9990 - 999,999,999TriggerInterval,单位毫秒,只对FIRST方式有效队列
(Local/Model)TRIGGERNOTRIGGERTRIGGER
NOTRIGGERTriggerControl队列
(Local/Model)TRIGTYPEFIRSTFIRST
EVERY
DEPTHTriggerType队列
(Local/Model)TRIGDPTH1TriggerDepth队列
(Local/Model)TRIGMPRI0TriggerMsgPriority队列
(Local/Model)TRIGDATA空最多64字节触发数据字串,可以用来指明触发通道名进程APPLICID空应用程序名进程APPLTYPE空应用程序平台进程USERDATA空用户数据,也可以用来指明触发通道名进程ENVRDATA空环境数据
队列上的 TRIGGER选项有两种取值:TRIGGER或NOTRIGGER,它相当于触发器的开关。如果设置成NOTRIGGER,则不会有触发发生,所有与触发相关的设置全部失效。
队列上共有三种触发方式:FIRST、EVERY、DEPTH,由队列属性TRIGTYPE指定。无论哪一种方式,能够满足触发条件的消息优先级必须大于等于队列触发优先级属性TRIGMPRI。
队列管理器上的TRIGINT属性表示FIRST方式时触发的复位时间。仅对FIRST方式有效。队列上触发深度属性TRIGDPTH表示DEPTH方式时满足触发条件的队列深度,仅对DEPTH方式有效。
触发方式
WebSphere MQ支持三种触发方式:FIRST、EVERY和DEPTH。
FIRST
顾名思义即“第一条”消息会引起触发,以后紧跟的消息则不会。WebSphere MQ 规定,如果队列深度从0到1的时候,发生FIRST触发。以后一段时间内后继到达的消息只要不是将队列深度从0变成1,则不会再引起FIRST触发。在这段时间过后,FIRST触发复位,下一个到达的消息会再次引起FIRST触发。
所以,准确地说,FIRST不是指队列中到达的第一条消息,而是一段时间内到达的第一条消息。这里所谓的“一段时间”是由队列管理器属性TRIGINT (TriggerInterval) 指定的,TriggerInterval 单位毫秒,缺省值为 999,999,999,是一段很长的时间,大约11.5天。如图,从触发开始记时,在 TriggerInterval 期间,FIRST触发机制被抑制,只有在这段时间过后,FIRST触发机制才重新起作用。
在应用设计与布署的时候,要适当地调整TriggerInterval时间。一批消息到达的时候,以第一条消息触发起应用程序,一般来说,触发起来的应用程序会连续处理队列中的消息直到队列被取空。后到的消息会在队列中等待一段时间,到FIRST触发机制复位后,由以后的第一条消息再次触发起来的应用程序进行处理。如果消息到达队列是均匀的,间隔时间为T,则消息在队列中的最大等待时间为 TriggerInterval + T。如果 TriggerInterval = 0,则FIRST与EVERY的效果相同。
EVERY
EVERY方式即每次消息的到达都会引起消息触发。但由于消息到达、触发消息生成、应用进程启动、消息处理四个步骤是异步流水线方式完成的,所以,如果消息以高频率方式到达,在消息处理的时候,有可能发现队列中不止一条消息,通常会连续处理。反过来,也可能发现没有消息,因为被上一次触发起来的应用程序处理完了。这个时候
文档评论(0)