管理具有消息端点的消息
管理作为消息端点部署的消息驱动的 Bean (MDB) 的消息传递。消息端点是与 Java™ Platform, Enterprise Edition (Java EE) 连接器体系结构 (JCA) V1.5 相符的入站资源适配器的受管 Bean (MBean)。
关于此任务
借助消息端点 MBean,您可以激活和取消激活应用程序中的特定端点,以确保只将消息传递到与正常 EIS
资源进行交互的侦听消息驱动的 Bean。此功能允许您在 EIS 资源行为与预期不符的情况下优化
JMS 应用程序的性能。当执行侦听的消息驱动的 Bean 对不正常的资源调用操作时,以端点为目标的消息传递通常将失败。例如,如果消息传递提供程序(这是遵从 JCA V1.5 的入站资源适配器)的底层消息驱动的 Bean 尝试对未响应的数据库服务器落实事务,那么此消息传递提供程序可能无法将消息传递到端点。
注: 请将消息驱动的 Bean 设计成委派其他企业 Bean 执行业务处理。不要直接在消息驱动的 Bean 中访问 EIS 资源,而是通过代表 Bean 间接进行此访问。
消息端点 MBean 缓解了那些提供需要访问资源的消息端点的应用程序所固有的两个问题:
- 失败的消息要求进行附加的处理,例如再次将其传递到侦听端点或者将其重定向到用于处理失败的消息的备用目标。另外,资源适配器可能无限次地将消息重新传递到某个端点。
- 消息重定向要求实现专用目标(队列和侦听器)以处理失败的消息以及实现用于检测消息故障的逻辑。消息重定向的复杂性导致其容易引起错误,而且计算成本高昂。
取消激活(暂停)和重新激活(恢复)特定消息端点的能力使管理员能够让端点停止处理注定失败的消息,从而缓解了这些问题。将消息端点取消激活后,您可以修复引起问题的资源,然后重新激活该端点以便继续处理消息请求。在故障诊断过程中,不会影响到主管该端点的资源适配器或应用程序。
如果您要连接至 WebSphere® MQ,那么还可以使用激活规范中的 WAS_EndpointInitialState 定制属性来使消息端点以取消激活状态开始。将此属性设置为“不活动”时,消息驱动的 Bean 会与目标建立连接,但是不会开始接收消息。如果您知道已完成特定任务、已启动服务或已执行检查时,可以使用此设置来在消息处理开始之前,自动取消激活消息端点。可以采用在操作期间暂停后重新激活消息端点的方式,激活消息端点。
过程
结果
- 侦听非持久主题的 MDB(依赖于配置):取消激活(暂停)消息端点所暗指的行为通常依赖于该端点所实现的功能。例如,如果已将消息驱动的 Bean 配置为侦听服务集成总线中的非持久主题,那么取消激活该消息端点相当于停止应用程序,并且将导致关闭预订。这意味着,该消息驱动的 Bean 不会接收到任何在该消息端点处于暂停状态期间发布的消息。
- 集群式消息驱动的 Bean(依赖于拓扑):在此方案中,将消息驱动的 Bean 应用程序部署到服务器集群。给定消息端点 MBean 只控制该集群中一个服务器中的 MDB 的行为,因此只会导致一个服务器停止处理消息。根据消息传递配置以及使用中的特定资源适配器不同,应该被所暂停消息端点使用的消息可能会被集群中的活动消息端点使用,也可能会保持处于未被使用状态直到暂停的消息传递恢复为止。
- 集群式消息驱动的 Bean,非集群式队列:在此方案中,您使用部署了同一个消息驱动的 Bean 的服务器的集群。这类似于使用具有同一消息选择标准的不同消息驱动的 Bean 的情况,但在这种情况下,消息驱动的 Bean 在逻辑上是同一个消息驱动的 Bean。暂停端点将只导致其中一个服务器停止接收消息,其他消息驱动的 Bean 将接收所有消息;没有任何消息会成为孤立消息。要停止所有端点,您必须指示集群中的每个服务器停止本地消息端点。
- 集群式消息驱动的 Bean,集群式队列:在此方案中,每个消息驱动的 Bean 都从队列的不同分区中拉出消息。通过 WebSphere MQ 和服务集成总线进行的消息传递具有类似但不同的功能。如果您正在使用 WebSphere MQ,那么暂停一个端点将不允许该消息驱动的 Bean 的其他实例接收消息。在服务集成总线中,来自所暂停端点的消息将被重定向到其他消息驱动的 Bean。