使用WASV7(V8)的MQ 消息传递提供者激活规范处理消息

简介: 本文将介绍了 WebSphere Application Server 中的 WebSphere MQ 消息传递提供者激活规范,以及这些规范用于连接 WebSphere MQ 队列管理器和监控消息目标的机制,随后展示了应用程序服务器如何向消息驱动 bean 传递适当的消息以供处理。本文面向两类读者:需要调优系统的 ...显示全部
简介: 本文将介绍了 WebSphere Application Server 中的 WebSphere MQ 消息传递提供者激活规范,以及这些规范用于连接 WebSphere MQ 队列管理器和监控消息目标的机制,随后展示了应用程序服务器如何向消息驱动 bean 传递适当的消息以供处理。

本文面向两类读者:

需要调优系统的 WebSphere Application Server 管理员和开发人员;

想了解应用程序服务器和 WebSphere MQ 之间的交互方式的 WebSphere MQ 管理员。

简介


IBM® WebSphere® Application Server V7 和 V8 提供基于 Java Message Service (JMS) 规范的异步消息传递。使用 WebSphere MQ 消息传递提供者,您可以编写一个消息驱动 bean,对 WebSphere MQ 目标(消息队列或主题)进行监听。当消息到达目标时,将会调用消息驱动 bean 中的 onMessage() 方法来处理消息。
在 WebSphere Application Server V7 和 V8 中,WebSphere MQ 消息传递提供者支持使用激活规范来监控 WebSphere MQ 队列管理器托管的目标。本文展示激活规范如何连接到分布式平台上的 WebSphere MQ,并描述监控查找消息的目标所使用的机制,以及如何在检测到适当的消息后调用消息驱动 bean。本文假定读者具有 JMS 和 WebSphere MQ 基本知识。

激活规范



简单说来,J2C 激活规范是一些受管理的对象,它们包含关于如何连接到 JMS 提供者的信息,以及 JMS 提供者上的受消息监控的目标的详细信息。当部署一个包含消息驱动 bean 的应用程序时,需要指定消息驱动 bean 要使用的激活规范。激活规范启动后,会连接到 JMS 提供者,打开 JMS 目标,然后监控它以查找消息。
图 1 和图 2 显示了使用 WebSphere Application Server Integrated Solutions Console 中的激活规范面板定义的样例 WebSphere MQ 激活规范。这个激活规范启动后,会创建一个 BINDINGS 模式连接,连接到名为 pault 的本地 WebSphere MQ 队列管理器,打开目标 jms/TestQueue,然后开始监控这个目标以查找消息。

图 1.



图 2. 指定激活规范将监控的 JMS 目标



可以将激活规范配置为使用消息选择器,这样就可以只将符合选择标准的消息传递到消息驱动 bean。在图 2 中,没有指定消息选择器,因此所有到达目标的消息都会由这个激活规范处理。
激活规范找到一条适合的消息后,会在应用程序服务器中计划一个工作来处理消息。每条消息都需要一个 JMS 服务器会话才能运行,可以同时处理多条消息。

每个激活规范都有一个关联服务器会话池,会话池的大小控制一个激活规范可以同时处理的消息数量。服务器会话池的默认大小是 10,这表示一个激活规范最多可以同时处理 10 条消息。要更改服务器会话池大小,修改激活规范高级属性 Maximum server sessions,如图 3 所示:

图 3. 指定可以同时处理的消息数量

收起
参与5

查看其它 3 个回答一路向北的回答

当这样的异常发生时,队列管理器会将 Message Reference 中的消息标记为 "unmarked",以便能重新处理这些消息。可以使用 Start timeout 更改激活规范 Advanced 属性面板上的 10 秒的时间限制,如图 4 所示:
图 4. 修改服务器会话超时和等待工作开始的时间



如前所述,如果 WMQJCAResourceAdapter 线程池中没有足够的线程,工作可能会被延迟,这引发了一个明显的问题 “这个线程池的大小应该是多少?”。激活规范对每个应用程序服务器使用一个线程池来运行服务器会话。每个激活规范都有一个名为 Maximum server sessions 的高级属性,可用于定义并发服务器会话的最大数量。由于每个服务器会话都用于处理消息,因此这个属性本质上表明使用这个激活规范的消息驱动 bean 可以同时处理多少消息。因此,为了确定 WMQJCAResourceAdapter 线程池的大小应该是多少,需要对应用程序服务器上每个 WebSphere MQ 消息传递提供者激活规范的 Maximum server sessions 属性值进行合计。例如,假设您定义了 25 个激活规范,每个激活规范的 Maximum server sessions 属性值都设置为 3。这样,最多可以同时运行 75 个服务器会话,每个会话都使用 WMQJCAResourceAdapter 线程池中的一个线程。图 5 显示了 WebSphere Integrated Solutions Console 中的 WMQJCAResourceAdapter 线程池,您可以在其中更改这个线程池的大小:
图 5. 更改应用程序服务器中定义的所有激活规范可用的最大线程数量



如果您看到应用程序服务器 SystemOut.log 文件中开始出现 WorkRejected 错误,那么首先应该检查 WMQJCAResourceAdapter 线程池的大小是否足够处理您的激活规范所需的所有服务器会话。如果线程池大小适当,那么导致错误的原因是 Work Manager 不能在指定的时间内启动工作请求。这时,您应该增加激活规范高级属性 Start Timeout 的值,或者减少您的应用程序服务器系统上的负载。
2012-01-06
浏览689

回答者

一路向北 最近回答过的问题

回答状态

  • 发布时间:2012-01-06
  • 关注会员:1 人
  • 回答浏览:689
  • X社区推广