`

WebSphere MQ V7 发布/订阅技术

    博客分类:
  • MQ
 
阅读更多

本文介绍发布/订阅(Publish/Subscribe)技术WebSphere MQ V7 中实现的原理及方法。WebSphere MQ V7 在 MQ V6 的基础上做了很大改动。MQ V7 不仅增强了发布/订阅功能,提供了一种新的发布/订阅引擎并整合在队列管理器中,还扩展了 MQ API 接口。在 WebSphere MQ V7 中,可以使用 MQ Explorer 对发布/订阅进行图形化的使用和管理。

  发布/订阅技术概述

  发布/订阅是一种异步消息传输机制,它定义了应用程序模型,把消息的发布者(Publisher)与消息的订阅者(Subscriber)以一种松耦合的方式联系在一起,它们不需要知道对方的任何信息,甚至不需要知道对方是否存在,就可以实现消息的异步传递。发布者和订阅者之间通过主题(Topic)交换信息:发布者把信息发布到主题字符串(Topic String),订阅者在主题上注册并接收信息,通过这种方式主题字符串把发布者和订阅者连接起来。

  下面介绍一个发布/订阅的具体实例。图 1 是 IBM Redbooks RSS 网站。网站(发布者)定期在每类技术专题(主题)发布最新的 Redbooks 信息,用户(订阅者)在自己感兴趣的技术专题订阅,当该技术专题有最新的 Redbooks 信息到达时,用户便会接收到。网站不需要知道哪些用户定订阅了哪些技术专题,它们需要做的只是在各类技术专题发布 Redbooks 信息。用户关心的只是 Redbooks 信息,它们不需要知道是谁发布的,它与网站之间是松耦合关系,这就构成了一个典型的发布/订阅系统

图 1. 典型的发布/订阅系统

 


  主题(Topic)和订阅(Subscription)是发布/订阅中重要的对象,MQ V7 把它们作为新增加的对象并整合到队列管理器中。本文将从主题和订阅展开讲解,详细讲述它们在 MQ V7 中的定义和属性以及 MQ V7 是如何通过主题和订阅对发布/订阅进行管理。接下来本文将通过复杂的 MQ V7 发布/订阅环境讲解分布式发布/订阅技术,这部分内容是 MQ V7 发布/订阅技术中的高级部分,以使读者对 MQ V7 发布/订阅技术有更深入的了解。

  WebSphere MQ V7 发布/订阅管理

  MQ V7 把发布/订阅消息机制整合到队列管理器中,这样做很容易对发布/订阅进行管理、配置等操作。可以通过 MQSC 脚本在命令行管理配置主题和订阅,也可以通过 MQ Explorer 图形化的方式管理配置主题和订阅。

  主题的管理

  WebSphere MQ V7 把主题作为一种新的对象类型定义在队列管理器中。主题字符串是主题 对象的属性,它是连接发布者和订阅者之间的“纽带”。

  在 MQ V7 队列管理器内部,主题是以主题树的继承形式展现的。图 2 是一棵主题树,在 主题树的最顶端是树的根节点 SYSTEM.BASE.TOPIC,其他的节点可以分成两类:一类是管理节点,一类是非管理节点。

  管理节点:在主题树节点中,定义了主题对象的节点被称为是管理节点,它们是主题树中永久部分,不会因为队列管理器重启被系统删除掉。管理节点允许在其上定义该节点的属性,非管理节点可以继承该属性。图2 中 主题 FIFA 所在的节点是管理节点,因为在该节点上定义了主题对象 FOOTBALL 并定义了主题字符串 FIFA。

  非管理节点:主题字符串并不用预先定义,应用程序在发布或订阅一个不存在的主题字符串时,该主题字符串会自动生成,它在主题树中以非管理节点存在,非管理节点的所有属都性继承在它以上的第一个管理节点的属性。在图 2 中主题字符串 FIFA/EURO 不是预先定义的,它在主题树中以非管理节点形式存在,它继承 FIFA 所在管理节点的所有属性。

图 2. 主题树
 

  对于管理节点,需要预先定义主题对象,在 MQ V7 中,可以通过 MQSC 或 MQ Explorer 定义主题对象。清单 1 中使用 MQSC 脚本命令定义一个主题,主题名字是 WEST, 主题字符串是 NBA/LAKER。


  清单 1. 定义主题

DEFINE TOPIC(WEST) TOPICSTR(NBA/LAKER) DESCR('This is a TOPIC') PUB(ASPARENT) SUB(
ENABLED) + WILDCARD(PASSTHRU)
1 : DEFINE TOPIC (WEST) TOPICSTR(NBA/LAKER) DESCR('This is a TOPIC') PUB(
ASPARENT) SUB(ENABLED) WILDCARD(PASSTHRU)
AMQ8690: WebSphere MQ TOPIC created.

  清单 1 中参数的意义:

  TOPIC:主题名字。

  TOPIC STR:主题字符串。

  DESCR:对主题的描述。

  PUB:是否允许发布者在这个主题上发布消息,它有三个选项:ENABLED 允许,DISABLED 禁止,ASPARENT 继承父节点。在图 3 中,由于 WEST 所在的节点 PUB 属性是 ASPARENT,并且它的父节点不是管理节点,所以 WEST 所在的节点继承了根结点 SYSTEM.BASE.TOPIC 的属性。

  SUB:是否允许订阅者在这个主题上订阅操作。它有三个选项:ENABLED 允许,DISABLED 禁止,ASPARENT 继承父节点。

  WILDCARD:通配符。它有两个选项:PASSTHRU 和 BLOCK。举例说明它们的含义:在图 3 中,若一个订阅者订阅主题字符串“#”,这会导致在主题树中所有主题上的发布内容被发送到订阅者。如不希望在 FIFA 以下的节点接收到发布内容,可以按照清单 2 上的命令修改 WILDCARD 属性为 BLOCK。WILDCARD 的默认属性值为 PASSTHRU,没有 ASPARENT 属性。

图 3. 继承管理节点属性


  清单 2. 修改 WILDCARD 属性为 BLOCK

ALTER TOPIC(FOOTBALL) WILDCARD(BLOCK)
4 : ALTER TOPIC(FOOTBALL) WILDCARD(BLOCK)
AMQ8691: WebSphere MQ TOPIC changed.

  清单 3 显示已经定义的主题 FOOTBALL 的信息。

  清单 3. 显示主题信息

DISPLAY TOPIC(FOOTBALL)
5 : DISPLAY TOPIC(FOOTBALL)
AMQ8633: Display TOPIC details.
TOPIC(FOOTBALL)                         TYPE(LOCAL)
TOPICSTR(FIFA)                          DESCR( )
CLUSTER( )                              DURSUB(ASPARENT)
PUB(ASPARENT)                           SUB(ASPARENT)
DEFPSIST(ASPARENT)                      DEFPRTY(ASPARENT)
DEFPRESP(ASPARENT)                      ALTDATE()
ALTTIME(01.57.11)                       PMSGDLV(ASPARENT)
NPMSGDLV(ASPARENT)                      PUBSCOPE(ASPARENT)
SUBSCOPE(ASPARENT)                      PROXYSUB(FIRSTUSE)
WILDCARD(BLOCK)                         MDURMDL( )
MNDURMDL( )

  清单 4 使用 DISPLAY TOPIC(*) MQSC 命令显示队列管理器中所有主题的定义,并用Where 语句根据主题字符串的值等于 (EQ) FIFA 对主题过滤,得到符合特定属性值的主题。

  清单 4. 用 WHERE 语句匹配显示主题信息

DISPLAY TOPIC(*) WHERE(TOPICSTR EQ FIFA)
6 : DISPLAY TOPIC(*) WHERE(TOPICSTR EQ FIFA)
AMQ8633: Display TOPIC details.
TOPIC(FOOTBALL) TYPE(LOCAL)
TOPICSTR(FIFA)

  清单 5 显示主题字符串 FIFA 所在节点的状态:DISPLAY TPSTATUS(Topic-String)。从返回值中可以看到主题字符串“FIFA”的主题名字是 FOOTBALL,这个节点是 ADMIN 及管理节点。

  清单 5. 显示主题字符串所在节点的状态

DIS TPSTATUS(FIFA)
11 : DIS TPSTATUS(FIFA)
AMQ8754: Display Topic status details.
TOPICSTR(FIFA)                          ADMIN(FOOTBALL)
MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE)
MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE)
DEFPSIST(NO)                            DEFPRTY(0)
DEFPRESP(SYNC)                          DURSUB(YES)
PUB(ENABLED)                            SUB(ENABLED)
PMSGDLV(ALLDUR)                         NPMSGDLV(ALLAVAIL)
RETAINED(NO)                            PUBCOUNT(0)
SUBCOUNT(0)                             PUBSCOPE(ALL)
SUBSCOPE(ALL)

  清单 6 使用 DISPLAY TPSTATUS(FIFA/+)返回 FOOTBALL 节点的下一级所有节点的状态,因为该节点是非管理节点,所以 ADMIN 参数是空。

  清单 6. 使用“+”返回主题节点下一级所有节点的状态

DIS TPSTATUS(FIFA/+)
2 : DIS TPSTATUS(FIFA/+)
AMQ8754: Display Topic status details.
TOPICSTR(FIFA/EURO)                     ADMIN( )
MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE)
MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE)
DEFPSIST(NO)                            DEFPRTY(0)
DEFPRESP(SYNC)                          DURSUB(YES)
PUB(ENABLED)                            SUB(ENABLED)
PMSGDLV(ALLDUR)                         NPMSGDLV(ALLAVAIL)
RETAINED(NO)                            PUBCOUNT(0)
SUBCOUNT(1)                             PUBSCOPE(ALL)
SUBSCOPE(ALL)

  清单 7 使用 DISPLAY TPSTATUS(FIFA/#) 命令不仅返回了 FOOTBALL 节点本身的状态,还返回了 FOOTBALL 以下所有节点的状态。

  清单 7. 在 DISPLAY TPSTATUS 命令中使用“#”

DIS TPSTATUS('FIFA/#')
12 : DIS TPSTATUS('FIFA/#')
AMQ8754: Display Topic status details.
TOPICSTR(FIFA/EURO/ESP)                 ADMIN( )
MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE)
MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE)
DEFPSIST(NO)                            DEFPRTY(0)
DEFPRESP(SYNC)                          DURSUB(YES)
PUB(ENABLED)                            SUB(ENABLED)
AMQ8754: Display Topic status details.
TOPICSTR(FIFA)                          ADMIN(FOOTBALL)
MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE)
MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE)
DEFPSIST(NO)                            DEFPRTY(0)
DEFPRESP(SYNC)                          DURSUB(YES)
PUB(ENABLED)                            SUB(ENABLED)
PMSGDLV(ALLDUR)                         NPMSGDLV(ALLAVAIL)
SUBSCOPE(ALL)
AMQ8754: Display Topic status details.
TOPICSTR(FIFA/EURO)                     ADMIN( )
MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE)
MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE)
DEFPSIST(NO)                            DEFPRTY(0)
DEFPRESP(SYNC)                          DURSUB(YES)
PUB(ENABLED)                            SUB(ENABLED)
PMSGDLV(ALLDUR)                         NPMSGDLV(ALLAVAIL)
SUBSCOPE(ALL)

  值得注意的是,DISPLAY TPSTATUS 命令不支持“*”,但是可以在 WHERE 语句中使用“*”作为过滤条件。清单 8 中命令返回以 FIFA/EURO/E 开头节点的状态。

  清单 8. WHERE 语句中使用“*”作为过滤条件

DISPLAY TPSTATUS('FIFA/#') WHERE(TOPICSTR LK FIFA/EURO/E*) ALL
1 : DISPLAY TPSTATUS('FIFA/#') WHERE(TOPICSTR LK FIFA/EURO/E*) ALL
AMQ8754: Display Topic status details.
TOPICSTR(FIFA/EURO/ESP)                 ADMIN( )
MDURMDL(SYSTEM.DURABLE.MODEL.QUEUE)
MNDURMDL(SYSTEM.NDURABLE.MODEL.QUEUE)
DEFPSIST(NO)                            DEFPRTY(0)
DEFPRESP(SYNC)                          DURSUB(YES)
PUB(ENABLED)                            SUB(ENABLED)
PMSGDLV(ALLDUR)                         NPMSGDLV(ALLAVAIL)
RETAINED(NO)                            PUBCOUNT(0)
SUBCOUNT(0)                             PUBSCOPE(ALL)
SUBSCOPE(ALL)

  另外,可以使用 DISPLAY TPSTATUS(‘#’) 返回主题树中所有节点的状态,也可以使用DISPLAY TPSTATUS(+) 返回主题树根结点的状态。

  上面详细介绍了如何使用 MQSC 脚本命令实现对主题的管理,接下来我们将介绍如何使用 MQ Explorer 和 MQSC 脚本实现对订阅的管理。

  订阅的管理

  WebSphere MQ V7 提供了两种管理订阅的方法,一种是通过 MQ Explorer 管理,另一种是通过 MQSC 命令管理。

  使用 MQ Explorer创建订阅

  打开 MQ V7 Explorer,展开队列管理器目录结构,找到被管理的队列管理器,右击“Subscriptions”,如图 4:

 

图 4. 创建 Subscription 步骤一
 

  点击“Subscription”打开创建新的“Subscription”窗口,如图 5:

图 5. 创建 Subscription 步骤二
 

  在图 5 中可以通过 Select 按钮选择已经存在的主题,也可以在 Topic Name 和 Topic String 处输入。参数 Destination Class 有两个值 Managed 和 Provided,如果选择 Managed,队列管理器提供动态队列作为 Destination。如果选择 Provided,用户需要输入 Destination 值,该值必须是已经存在的队列。

  使用 MQSC 脚本管理订阅

  WebSphere MQ V7 引入了新的 MQSC 命令定义和管理订阅。清单 9 使用 DEFINE SUB 命令定义新的订阅 SUB1,指定 Q1 为 Destination。


  清单 9. 使用 MQSC 定义订阅

DEFINE SUB(SUB1) TOPICSTR(NEWS/SPORTS) DEST(Q1)
6 : DEFINE SUB(SUB1) TOPICSTR(NEWS/SPORTS) DEST(Q1)
AMQ8094: WebSphere MQ subscription created.

  定义 Managed 类型的订阅可以不用指定 DEST 参数,清单 10 定义了 Managed 类型的 订阅 SUB2。

  清单 10. 定义 Managed 类型订阅

DEFINE SUB(SUB2) TOPICSTR(NEWS/ENT) DESTCLAS(MANAGED)
1 : DEFINE SUB(SUB2) TOPICSTR(NEWS/ENT) DESTCLAS(MANAGED)
AMQ8094: WebSphere MQ subscription created.

  清单 11 使用 DISPLAY SUB 命令显示订阅的定义。

  清单 11. 显示订阅定义

DIS SUB(SUB2)
1 : DIS SUB(SUB2)
AMQ8096: WebSphere MQ subscription inquired.
SUBID(414D5120514D35202020202020202020E3DB4F4920145108)
SUB(SUB2)                               TOPICSTR(NEWS/ENT)
TOPICOBJ( )
DEST(SYSTEM.MANAGED.DURABLE.494FDBE307511420)
DESTQMGR(QM5)                           PUBAPPID( )
SELECTOR( )                             USERDATA( )
PUBACCT(16010515000000B218D7C0694A597186E61BE3F603000000000000000000000B)
DESTCORL(414D5120514D35202020202020202020E3DB4F4920145108)
DESTCLAS(MANAGED)                       DURABLE(YES)
EXPIRY(UNLIMITED)                       PSPROP(MSGPROP)
PUBPRTY(ASPUB)                          REQONLY(NO)
SUBSCOPE(ALL)                           SUBLEVEL(1)
SUBTYPE(ADMIN)                          VARUSER(ANY)
WSCHEMA(TOPIC)                          SUBUSER(root)

  在以上的章节,我们为您讲述了 MQ V7 对主题和订阅这两个对象的管理。接下来,我们将为您介绍两种分布式发布/订阅结构以帮助您更好的理解 MQ V7 发布/订阅技术。

分享到:
评论

相关推荐

    IBM WebSphere MQ 技术白皮书.doc

    IBM WebSphere MQ 技术白皮书是 IBM 公司发布的一份技术白皮书,旨在介绍 IBM WebSphere MQ 产品的技术特性、架构和价值。下面是根据白皮书的内容生成的相关知识点。 概述 在概述部分,白皮书介绍了 IBM WebSphere...

    IBM WebSphere MQ V7 jar

    "IBM WebSphere MQ V7 jar" 指的是版本7的WebSphere MQ对应的Java API库。 在描述中提到的“java连接MQ操作Queue数据所需jar”,意味着开发人员在编写Java程序来连接和操作IBM WebSphere MQ的队列时,需要引入这些...

    WebSphere MQ for i5/OS 系统管理员

    ### WebSphere MQ for i5/OS 系统管理员知识点概览 ...通过学习本书,读者不仅能够掌握 WebSphere MQ 的基本操作方法,还能了解到如何解决实际工作中遇到的各种问题,从而提升工作效率和技术水平。

    Websphere MQ v7 新特性.pdf

    无论是对于需要进行性能调优的现有系统,还是计划采用最新技术的新项目,Websphere MQ v7 都是一个值得考虑的强大选项。通过利用其新特性,开发者可以构建出更加高效、可靠且易于管理的消息中间件解决方案。

    websphere mq v7 migration guide

    ### WebSphere MQ V7 迁移指南核心知识点详解 #### 一、引言:WebSphere MQ V7 迁移概述 - **版本介绍**:WebSphere MQ Version 7.0 是 IBM 公司推出的一款消息中间件软件,用于在分布式环境中实现应用程序之间的...

    WebSphere MQ介绍教程

    WebSphere MQ的v7版本特别针对开发者的易用性和选择性进行了增强,提供了集成的发布/订阅消息功能。 WebSphere MQ具有如下特点: 1. 统一的消息传输机制:为SOA架构提供了通用的消息处理方式,使企业能够灵活地将...

    Websphere MQ入门教程-使用IBM Websphere MQ

    - **消息模型**:WebSphere MQ基于发布/订阅和点对点两种消息传递模式。发布/订阅模式下,生产者发布消息到主题,消费者订阅特定主题接收消息;点对点模式则通过队列实现,消息被发送到队列,一个或多个接收者可以...

    IBM WebSphere MQ 安装包

    【IBM WebSphere MQ安装包详解】 IBM WebSphere MQ,前身为IBM MQSeries,是IBM公司推出的一款企业级的消息中间件产品。它在信息技术领域扮演着至关重要的角色,为跨网络、操作系统和应用程序提供了高效、安全的...

    IBM WebSphere MQ入门教程.pdf

    IBM WebSphere MQ入门教程 IBM WebSphere MQ 是一种基于消息队列的中间件,用于实现不同的应用程序之间的异步通信。下面是对 IBM WebSphere MQ 的入门教程的总结,涵盖了 WebSphere MQ 的原理、体系结构、重要特点...

    MQ,websphere mq

    WebSphere MQ,是IBM公司推出的一款企业级消息中间件产品,它是MQ技术的一种具体实现。WebSphere MQ提供了跨平台的消息传递能力,支持多种操作系统和编程语言,如Windows、Linux、Unix、Java、C++、COBOL等。它能够...

    java 开发 IBM WebSphere MQ 最新jar

    Java连接IBM WebSphere MQ 7处理队列信息所需jar包,从安装目录直接打的包。主要包括: /com.ibm.mq.commonservices.jar /com.ibm.mq.defaultconfig.jar /com.ibm.mq.fta.jar /com.ibm.mq.headers.jar /...

    精通 WebSphere MQ.pdf

    WebSphere MQ支持两种主要的消息传递模式:点对点(PTP)和发布/订阅(Pub/Sub)。PTP模式下,每个消息只有一个接收者;Pub/Sub模式允许多个订阅者接收同一消息。 #### 3.2 协同工作 WebSphere MQ中的队列管理器...

    websphereMQ.ppt

    【标题】:“WebSphere MQ”是IBM开发的一种高级消息队列协议和软件产品,它允许应用程序之间通过网络发送和接收消息。在企业级系统集成和分布式计算环境中,WebSphere MQ扮演着关键角色,确保数据传输的可靠性和...

    WebSphere_MQ_V6.0.zip

    WebSphere MQ V6.0是这个系列的一个重要版本,发布于2007年,为用户提供了稳定、高效且安全的消息传递服务。 **WebSphere MQ的基本概念:** 1. **消息队列**:WebSphere MQ的核心概念,是数据传输的载体,用于存储...

    Websphere MQ入门教程7

    - 通道:用于队列管理器之间的安全通信,支持点对点和发布/订阅两种模式。 1.4 **WebSphere MQ的重要特点** - 事务处理:确保消息的原子性和一致性。 - 安全性:通过用户认证和授权来保护消息数据。 - 高可用性...

    WebSphere MQ简单实例(发送消息)

    队列提供了一种可靠的一对一消息传递方式,而主题则支持一对多的发布/订阅模式。 在"WebSphere MQ简单实例(发送消息)"中,我们通常会经历以下几个步骤: 1. **设置环境**:安装WebSphere MQ服务器,并配置相应的...

    IBM Websphere MQ v6.0 DataSheet

    - IBM WebSphere MQ基于发布/订阅和队列模型,支持点对点和广播通信模式。在v6.0中,这两种模型得到了优化,确保了数据的可靠传输和高效处理。 2. **多平台支持**: - v6.0支持多种操作系统平台,包括Windows、...

    WebsphereMQ.rar_JMS MQ_MQ_MQ JMS_java mq jms_websphereMQ downloa

    在本场景中,"用jms向WebSphere mq里发送消息"是指使用JMS接口来与WebSphere MQ进行交互,实现消息的发布和订阅。 首先,我们需要理解JMS的核心概念。JMS提供两种消息模型:点对点(Point-to-Point)和发布/订阅...

Global site tag (gtag.js) - Google Analytics