IBM WebSphere MQ消息通道的配置和维护(四)

在所有平台上,都有一个特殊的触发监控器叫做通道启动器(Channel Initator),它的作用就是启动通道。

2.2.2   触发类型

l  EVERY:

应用队列中每接受到一个消息时,都将产生触发消息。如果应用程序仅仅处理一个消息就结束,可采用这种触发类型。

l  FIRST:

应用队列中消息从0变为1时会触发事件。如果当队列中的一个消息到达时启动程序,直到处理完所有消息才结束,则采用这种触发类型。

l  DEPTH:

应用队列中消息数目和TriggerDepth(引起触发事件发生时,队列中的消息数目)属性值相同时,才会产生触发事件。当一系列请求的回复都收到时,才启动应用程序,则可以采用这种方法。

需要注意的时,当DEPTH属性值为0的时候,实际上就形成了同步通信。另外,当采用Depth触发时,产生触发消息以后,队列将被修改为非触发方式,如果需要再次触发,需要重新设置成允许触发。

一般而言,在实际应用中,如果通道设置成触发方式,触发类型往往设置成为FIRST和DEPTH。

2.2.3   触发器工作流程

1)        本地或远程应用程序A,往应用队列(Application Queue)中PUT了一条消息。

2)        如果队列的触发类型设置为first,当队列原来深度为0时(队列为空),这时PUT一条消息到队列中将形成触发事件,同时产生一条触发消息,触发消息中将包含进程定义中的信息,因为进程定义中包含启动程序B所需的信息,所以触发消息中也包含了启动程序B所需的信息。

3)        队列管理器创建触发消息,并把它PUT入与应用队列相关的启动队列Initiation Queue。

4)        触发监控器(Trigger Monitor)从启动队列(Initiation Queue)中GET触发消息。

5)        触发监控器处理触发消息,发出启动应用程序B的命令。

6)        应用程序B打开应用队列(Application Queue),并处理队列中的消息。

 

注:如果是通道触发将可以不需要创建进程对象(process object),只是在传输队列的trigdata中设置需要启动的通道名。

 

2.2.4   配置消息通道触发

配置消息通道触发启动,需要使用到的对象有传输队列,通道启动队列,发送通道,通道启动器。我们本配置案例中传输队列名是QMB,通道启动队列采用SYSTEM.CHANNEL.INITQ,发送通道名QMA.QMB,通道启动器为runmqchi,该进程在队列管理器启动的时候自动启动。下面我们通过举例来演示配置实现消息通道触发启动。

l  首先我们来查看一下传输队列QMB都有哪些属性,显示如下清单所示,其中清单中的标注红色的属性和通道触发配置相关。

dis ql(QMB)

1 : dis ql(QMB)

AMQ8409: 显示队列细节。

QUEUE(QMB)                           TYPE(QLOCAL)

ACCTQ(QMGR)                          ALTDATE(2009-02-06)

ALTTIME(11.41.44)                       BOQNAME( )

BOTHRESH(0)                           CLUSNL( )

CLUSTER( )                             CLWLPRTY(0)

CLWLRANK(0)                             CLWLUSEQ(QMGR)

CRDATE(2008-12-05)                      CRTIME(10.37.53)

CURDEPTH(0)                             DEFBIND(OPEN)

DEFPRTY(0)                              DEFPSIST(NO)

DEFSOPT(SHARED)                         DEFTYPE(PREDEFINED)

DESCR( )                                DISTL(YES)

GET(ENABLED)                            HARDENBO

INITQ( )                                IPPROCS(1)

MAXDEPTH(5000)                          MAXMSGL(4194304)

MONQ(QMGR)                              MSGDLVSQ(PRIORITY)

TRIGGER                                 NPMCLASS(NORMAL)

OPPROCS(1)                              PROCESS( )

PUT(ENABLED)                            QDEPTHHI(80)

QDEPTHLO(20)                            QDPHIEV(DISABLED)

QDPLOEV(DISABLED)                       QDPMAXEV(ENABLED)

QSVCIEV(NONE)                           QSVCINT(999999999)

RETINTVL(999999999)                     SCOPE(QMGR)

SHARE                                   STATQ(QMGR)

TRIGDATA( )                             TRIGDPTH(1)

TRIGMPRI(0)                             TRIGTYPE(FIRST)

USAGE(XMITQ)

l  设置传输队列为触发模式TRIGGER。

l  设置触发类型为every/first/depth其中的一种,例如TRIGTYPE(FIRST)。如果设置为TRIGTYPE(DEPTH),则还需要设置触发深度属性,例如TRIGDPTH(4),表示当队列中的消息数由3个增加到4个的时候才能形成触发事件,但需要注意的是深度触发事件只能产生一次事情,下次传输队列的消息数由3个增加到4个时候不会产生触发事件,所以在消息通道触发中,我们推荐采用TRIGTYPE(FIRST)。

l  在通道触发中,推荐使用SYSTEM.CHANNEL.INITQ队列作为初始队列, 该队列为MQ专用的通道启动队列, 不需要手工启动其触发监视器,设置传输队列INITQ(SYSTEM.CHANNEL.INITQ )属性。

l  通过TRIGDATA属性设置需要触发的通道名,例如TRIGDATA(QMA.QMB )。

l  对于TRIGMPRI属性的含义是基于消息优先级触发,也即某类优先级的消息满足的触发条件才产生触发事件,我们在消息通道触发中不推荐使用。

 

完整MQSC命令参考如下:

ALTER QL(QMB)  +

TRIGGER  +

TRIGTYPE(FIRST)  +

INITQ(SYSTEM.CHANNEL.INITQ)  +

TRIGDATA(QMA.QMB)

 

l  通道的触发监控器我们采用系统的自带的runmqchi程序,缺省队列管理器启动的时候,runmqchi进程会自动启动。

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注