使用Websphere MQ 集群进行负载平衡

IBM WebSphere MQ (Message Queue) 是目前应用最多的消息中间件产品,它简化了应用程序之间的数据传输,提供了统一的通信标准,确保分布式网络环境下可靠的、跨平台的信息传输和数据交换。应用程序只需要将消息发送给 MQ,由 MQ 负责将消息安全可靠地发送出去。Websphere MQ 支...显示全部
IBM WebSphere MQ (Message Queue) 是目前应用最多的消息中间件产品,它简化了应用程序之间的数据传输,提供了统一的通信标准,确保分布式网络环境下可靠的、跨平台的信息传输和数据交换。应用程序只需要将消息发送给 MQ,由 MQ 负责将消息安全可靠地发送出去。
Websphere MQ 支持集群功能。多个队列管理器可以分布在不同的机器上。集群功能简化了系统配置,不需要在每个队列管理器上创建消息通道、远程队列定义和传输队列。使用集群技术可以提高系统的可用性和实现负载均衡。

MQ 集群概述



对于 MQ 两个队列管理器之间的通信,需要创建相应的对象。在发送队列管理器上,要创建一个远程队列,这个远程队列指向远程的目的地队列。还要创建一个传输队列做为存储转发队列以及一个发送通道指向接收队列管理器。在接收队列管理器上,要创建一个本地队列和一个接收通道。如果一个网络中有多个队列管理器,并且两两之间要实现通信时,需要创建多个远程队列、传输队列和发送通道。

为了简化点对点通信的系统配置,通过 MQ 提供的群集功能,减少了集群中队列管理器上的 MQ 对象数量。群集内的两个队列管理器之间的通信,不需要两两间建立消息通道,而是使用群集通道与其它成员通信。只需要在每个队列管理器上创建两个集群通道。一个集群接收通道用来从集群中的其他队列管理器接收消息。一个集群发送通道用来发送消息。

集群的仓储库中含有集群的信息,如队列管理器的位置,通道等信息。仓储库分为完整仓储库队列管理器和部分仓储库队列管理器。完整仓储库队列管理器有集群中所有队列管理器的信息。而部分仓储库队列管理器中只有自身的和它要通信的队列管理器的信息。部分队列管理器通过与完整队列管理器通信,查询到相关的集群信息。

集群中共享的队列叫做集群队列。集群中的其他队列管理器可以向集群队列发送消息而不需要创建对应的远程队列定义。通常会在集群中创建多个同名的集群队列实例,分布在不同队列管理器上。当消息发送到集群队列时,MQ 会通过负载平衡算法,决定消息实际发送到哪里队列管理器的队列上。收起
参与9

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

使用集群队列时需要注意的几点



如果对消息的逻辑处理有要求,或者对消息的处理顺序有要求,这时需要使用 MQOO_BIND_ON_OPEN 选项。例如,程序 A 向某个集群队列发送两条相互关联的消息,一条消息包含元数据,另一条消息包含实际数据内容,它们之间通过 groupId 相互联系。并且该集群队列在集群的两个队列管理器上各有一个同名集群队列实例。现在程序 B 需要从集群队列中取出相互关联的两条消息进行处理,如果这两条消息分别被发送到了两个不同的集群队列实例中,则程序 B 打开一个集群队列实例后,无法通过其中一条消息的 groupId,在同一个集群队列实例中找到另一条消息。要解决这个问题,可以将相互关联的消息发送到同一个集群队列实例上。在程序 A 将消息放入集群队列时,需要指定 MQOO_BIND_ON_OPEN 选项。
集群只在消息进入时实现负载平衡,一旦消息进入某个队列管理器上的集群队列,它就只能由该队列管理器处理。如果在消息被处理完之前,该队列管理器被挂起或者发生故障,已经进入该集群队列的消息将不能被处理。即其他队列管理器无法处理该队列管理器上同名的集群队列实例。这一点和 z/OS 的共享队列不同。在 z/OS 平台上,如果使用共享队列,多个队列管理器使用的是同一个队列实例,即使某个队列管理器不工作,其他的队列管理器可以处理该共享队列上的消息。

结束语



本文主要介绍了 Websphere MQ 集群的基本概念。通过命令和 MQ explorer 演示如何创建一个简单的 MQ 集群,并通过把消息放入集群队列的具体实例,实现负载平衡的效果。最后,对如何使用集群队列提出了一些建议。通过本文,读者可以对 MQ 集群有一个深入的了解。

http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1202_gaoly_mq/1202_gaoly_mq.html
2012-02-23
浏览769

回答者

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

回答状态

  • 发布时间:2012-02-23
  • 关注会员:1 人
  • 回答浏览:769
  • X社区推广