`
JAVA天地
  • 浏览: 673646 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论
阅读更多
  WebSphere MQ(以下简称MQ)是IBM公司享有盛誉的商业通信中间件。它被世界范围的许多大型企业广泛采用。它提供一个具有工业标准、安全、可靠的消息传输系统。MQ基本由一个消息传输系统和一个应用程序接口组成。应用程序使用MQ的API(消息队列接口MQI)函数和队列管理器(MQ运行时刻的程序)进行通信。队列管理器在工作时,它需要用到对象如队列和通道。同时,队列管理器也是一个对象。图1所示为MQ应用程序在运行时刻的图示。


图1 运行时刻的MQ1

  消息是一个信息单元,它由两部分组成:从一个程序发往另外一个程序的应用程序数据以及消息描述符或者消息头。

  消息描述符用来标识消息(message ID),同时它还包括一些控制信息,如消息类型,消息过期的时间,消息优先级等等。

  一条消息的最大长度为100MB,默认的最大消息长度为4MB。消息的最大长度依赖于MQ的版本。MQ第五版支持消息的最大长度为100MB。

  队列是一个安全的存储消息的地方,消息的存储一般是有顺序的。因为消息存放在队列中,所以应用程序可以以不同的速度、在不同的时间、不同的地点相互独立的运行。

  消息队列通信是应用程序之间进行通信的一种方式。应用程序在没有专有连接或者物理连接的情况下,能够通过向队列写入或读出消息进行通信,也即程序之间不是通过互相调用,而是通过向队列发送数据来进行通信。在这种通信方式下,应用程序不需要具有并发性。对于异步的消息通信,程序发送方不需要专门等待已发消息的回复,而是可以处理下一个事件。与之相对的是,同步消息通信在处理下一个事件之前必须等待已发消息的回复。对于用户来说,底层的协议是透明的。用户只需要考虑会话的程序或数据入口。
MQ应用于客户机/服务器模式或者分布式系统。应用程序可以工作在一个工作站上,也可以运行在不同平台的不同机器上。应用程序具有很好的移植性,能够轻松的从一个系统或者平台转移到另一个系统或者平台。程序的编写支持多种语言,包括Java。同样的,队列也适合许多不同的平台。

  因为MQ通过队列进行通信,所以它可以被看成是使用间接的程序--程序方式通信。程序员可以不指定接收消息的目标程序的名称,但是可以指定接收消息的队列的名称,每一个队列和一个程序相联系,一个程序可以有一个或者多个接收队列,而且可以有多个输出队列。输出队列包含着很多信息,这些信息可以是用来供服务器处理的,也可以是返还给发送消息的客户端的回复信息。

  使用MQ进行通信时程序员不必担心目标程序是否可用或是否繁忙,甚至不用考虑目标机器是否正常运行或者是否连接上了。程序员发送消息给目标队列,而目标队列是和目标程序相联系的,目标程序可能目前不可用。不用担心,MQ能够解决这种情况,如果需要,它甚至能够启动目标程序。

  如果目标程序不可用,消息会停留在队列中,稍后再被处理。队列可以在发送消息的机器中,也可以在接收消息的机器中,这取决于两台机器的两个系统之间是否能够建立连接。应用程序可以整天运行,也可以采用激发机制,所谓激发,就是指当有一条或数条消息到达队列时自动启动某个程序。


图2 消息和队列1

  图2说明了两个应用程序A和B之间是如何进行通信的。可以看到有两个队列,各队列里面存放着要接收或者发送的消息。

  程序和队列之间的方形图表示MQI(消息队列接口API)。程序就是使用MQI来和MQ的实时程序--队列管理器进行通信的。

  简单地说:MQ的核心部分是一个能够存储消息的服务器及一组能够转发消息的进程,分布在多个系统(异地、异种平台)上的应用程序依靠这种机制来交换要处理的数据2。队列管理器作为一个服务器,把消息以可靠的方式存储,即使机器发生故障重新启动后依然不会丢失,其可靠级别与数据库服务器相等。队列管理器间通过特别的交换机制保证数据不会因为底层网络的故障而丢失,并且能够在多点间接力式地传送。

  JMS是J2EE中的一个接口标准,为JAVA程序定义了一种标准的使用消息交换数据的编程方式,但JMS本身并不能实现消息的传送,一个调用JMS的应用程序发出消息调用后,具体的消息传送工作还需要底层的消息中间件来执行传送工作。JMS的作用就是使应用程序开发人员不需要关心底层的传送软件的种类,同一段程序,既可以用MQ传送,也可以用其他消息中间件来传送,如WEBLOGIC内含的具有消息中间件功能的部件。

MQ软件提供一个JAVA软件包,里面有JMS类库,和一套MQ的类库。不熟悉MQI编程方法的程序员可以用JMS,比较熟悉MQI编程方法的程序则可以用MQ类库来编程。下面的小程序是使用Java实现从队列管理器QM_SERVER中的队列INITQ写入或读出消息。

package transfer;
import com.ibm.mq.*;
public class SendMSG1
{
 private MQQueueManager qMgr;//定义一个队列管理器变量
 public static void main(String args[])
 {
  new SendMSG1();
 }
 public SendMSG1()
 {
  MQEnvironment.hostname="192.168.1.18";//本地IP
  MQEnvironment.channel="CHANNEL1";//用来通信的通道
  MQEnvironment.CCSID =1381;
  try{
   qMgr=new MQQueueManager("QM_SERVER");//队列管理器名称
   int openOptions=MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;
   MQQueue queue=qMgr.accessQueue("INITQ",openOptions,null,null,null);
   //建立连接
   MQMessage hello=new MQMessage();//要写入队列的消息
   try{
    hello.format=MQC.MQFMT_STRING ;
    hello.characterSet=1381 ;
    hello.writeString("这是测试!");
   }
   catch(java.io.IOException ex)
   {}finally{};
   MQPutMessageOptions pmo=new MQPutMessageOptions();
   for (int i=1;i<=5;i++)//将消息依次写入队列
   {
    hello.expiry=-1; //设置消息用不过期
    queue.put(hello);//将消息放入队列
   }
   queue.close() ;//关闭队列
   qMgr.disconnect() ; //断开连接
  }
  catch(Exception ex)
  {}
  finally{};
 }
}

  程序的运行结果如下图3所示:


图3 程序运行结果界面

  这个例子仅仅是向队列INITQ写入了5条相同的消息,当然,在实际应用中,消息可能是多种多样的,如果要传送数据库的内容,则可以在写入消息时,用一些特殊的符号来将各字段的数据区分开,那么在消息读出时,也可以根据此特殊的符号来读取数据。依据同样的步骤:和队列管理器建立连接-从队列读取消息---关闭队列---断开连接,可以用Java写出如何从队列中读出消息。

  MQ有许多显著的优点,比如借住在不同的平台上使用相同的应用程序接口,它能轻松的实现跨平台通信,从而能够使开发人员避开网络的复杂性;比如它对消息的处理不依赖于时间,在消息创建和发送时,不受时间的限制,增加了处理的灵活性......

  总之,MQ的特点以及IBM公司在企业应用领域所付出的巨大努力,使得它具有极强的生命力。现在,大量的政府部门、金融、电信和企业用户使用WebSphere MQ作为企业电子商务的基础平台。
分享到:
评论

相关推荐

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

    综上所述,WebSphere MQ实例涉及了消息中间件的基本概念、API的使用、配置文件解析以及应用程序的部署与测试。通过学习和实践这样的实例,开发者能够更好地理解和运用WebSphere MQ在实际项目中的消息传输功能。

    websphere mq 多实例的二份资料

    1. **多实例架构**:多实例配置允许在单个物理服务器或多个服务器上部署多个独立的Websphere MQ实例。每个实例都有自己的队列管理器,这样即使一个实例出现问题,其他实例仍能继续处理消息,从而提高了系统的整体...

    基于WebSphere MQ发送消息的简单JMS实例

    通过这个简单的JMS和WebSphere MQ实例,你可以了解到消息队列的基本用法。在实际项目中,这可以扩展到处理大量并发请求、保证数据一致性、或者实现解耦的微服务架构。了解和掌握JMS与WebSphere MQ的结合使用,对于...

    WebSphere MQ 多实例部署方案

    WebSphere MQ 多实例部署方案是一种高级别的高可用性(HA)配置,旨在增强消息中间件的稳定性,确保服务在单个实例失败时仍能继续运行。这一特性自MQV7.0.1版本开始引入,是WebSphere MQ产品的一个核心组件。多实例...

    IBM WebSphere MQ的使用

    6. **实例应用**:在“WebSphere MQ 实例”标签中,我们可以期待看到具体的代码示例,如如何连接队列管理器,如何发送和接收消息,以及如何处理异常等。 7. **安全性**:WebSphere MQ支持多种安全机制,包括SSL/TLS...

    Websphere MQ入门教程

    2. 队列管理器(Queue Manager):每个Websphere MQ实例都包含一个或多个队列管理器,它们负责管理队列、通道和其他资源,以及处理消息的路由和传输。 3. 队列(Queues):分为输入队列、输出队列和模型队列。输入...

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

    本教程的详细内容可参考附件中的“WebSphere MQ入门教程7.doc”,该文档将深入讲解上述知识点,并包含实例代码和配置步骤,是学习和理解WebSphere MQ的良好参考资料。在实际应用中,读者需结合自身业务场景,灵活...

    Java下操作IBM Websphere MQ的项目案例

    在IT行业中,IBM WebSphere MQ(也称为IBM MQ)是一种广泛使用的中间件,它允许应用程序在不同的网络协议、操作系统和硬件之间可靠地交换消息。在这个“Java下操作IBM Websphere MQ的项目案例”中,我们将探讨如何...

    Websphere MQ入门教程7

    【Websphere MQ入门教程7】是一本专为初学者和WebSphere MQ系统管理员及开发者设计的实用指南。全书涵盖了WebSphere MQ的基础知识、系统管理和应用开发等多个方面,旨在帮助读者深入理解这一消息中间件的工作原理和...

    Java监控WebSphere MQ 7.5中间件信息

    接着,创建PCFMessageAgent实例,并利用其send方法发送PCF命令,获取队列、通道或其他MQ对象的状态信息。 5. **PCF命令和参数**:例如,你可以使用MQCMD_LIST_COMMAND命令来获取队列管理器的所有对象信息,参数可能...

    WebSphere+MQ+Using+Java

    3. **Queue Manager(QMGR)**:每个WebSphere MQ实例都由一个或多个Queue Manager管理,它们负责维护队列、通道和其他资源。 4. **Queue 和 Topic**:Queue是点对点通信的基础,每个消息仅被一个消费者消费;Topic...

    WebsphereMQ查看软件

    WebsphereMQ,又称为IBM MQ,是一款由IBM开发的消息中间件,用于在不同系统、应用之间传递消息,实现异构环境下的数据通信。这款软件是企业级集成的关键组件,确保了数据传输的可靠性和安全性。 在使用WebsphereMQ...

    Websphere+MQ全套教程合集.rar

    13. 实现点对点通信:通过实例展示如何使用MQ实现实时系统间的简单通信。 14. 故障恢复与备份:学习如何设计和实施灾难恢复计划,包括备份和恢复Queue Manager。 15. 集成其他系统:了解如何将MQ与ERP、CRM等系统...

    IBM Websphere MQ Windows版快速入门.pdf

    - **应用场景**: 分享了WebSphere MQ在不同行业和场景下的应用实例。 - **配置实例**: 通过具体的配置文件和步骤来展示如何实现特定的功能需求。 综上所述,“IBM WebSphere MQ Windows版快速入门”文档不仅为用户...

    Websphere_MQ入门教程(中文)

    6. 应用开发与实例:通过实际案例展示如何在应用程序中集成和使用Websphere MQ。 7. 管理与监控:讲解如何管理和监控Websphere MQ的运行状态,确保系统的稳定和高效。 8. 故障排查与最佳实践:分享常见问题的解决...

    IBM websphere MQ 多种代码事例

    IBM WebSphere MQ,通常简称为MQ,是一种企业级的消息中间件,由IBM开发,用于在分布式系统中可靠地传输数据。消息中间件的作用是解耦应用程序,使得它们可以通过消息进行通信,而无需直接互相了解对方的实现细节。...

    基于WebSphere MQ的MQ trigger实例

    【基于WebSphere MQ的MQ Trigger实例】是一种在IBM WebSphere MQ消息中间件中实现自动响应消息触发机制的技术。MQ Trigger允许应用程序对特定消息队列中的消息进行监控,并在满足预定义条件时执行相应的操作,例如...

Global site tag (gtag.js) - Google Analytics