论文部分内容阅读
现代很多遗留传统系统使用CORBA、DCOM、RMI等RPC中间件技术进行数据集成和系统整合,此种架构具有如下的局限性:①同步通信;②生命周期紧密耦合;③点对点通信;④复杂度高N*(N-1)/2;⑤开发维护成本高。
因此随着业务的发展,业务系统也越来越复杂,面临着各种各样的数据集成和系统整合。系统之间的交互日趋复杂,所以迫切需要推出消息中间件来降低业务系统和功能模块相互交互的复杂度,降低业务系统和功能模块间的耦合,为业务系统和功能模块之间的交互提供统一的、健壮的、可扩展的、可靠的、高可用的底层传输服务。
消息中间件就是应运松偶合的概念而产生的,主要以队列和发布订阅为消息传输机制,以异步的方式将消息可靠的传输到消费端的一种基础产品。
MQ(Message Queue)消息中间件作为一个基础传输中间件已经问世好多年的历史了,他主要应用于分布式系统中,在分布式系统中,存在着许多异构环境、不同的开发语言和不同的传输协议,所以要实现这些系统之间的通信是一个相当复杂的工程。消息中间件就是为了解决这些问题,把这些问题从应用中分离出来,形成一个专门的底层系统软件,使分布式环境对我们应用开发人员来说是透明的。
消息中间件在整个软件应用集成系统中可以具有如下的优点:①异步通信;②生命周期松耦合;③复杂性低N;④开发维护成本低;⑤可提供可靠的传输。这个特点可以说是消息中间件的立足之本,对于应用来说,只要成功把数据提交给消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责;⑥可实现不重复传输。也就是断点续传功能,特别适合网络不稳定的环境,节约网络资源;⑦消息驱动。收到消息后主动通知消息接收方;⑧支持事务。应用程序可以把一些数据更新组合成一个工作单元,这些更新通常是逻辑相关的,为了保障数据完整性, 所有的更新必须同时成功或者同时失败(撤消)。
1 Active MQ
我们给予的消息基于Apache的ActiveMQ提供消息服务,ActiveMQ外界一致认为是最成熟最稳定的开源MQ产品,其性能不亚于SonicMQ等商业产品。目前版本是5.3.0,在下一个版本中将加入AIO,性能将会得到再次提升。
MQ通用框应用于下列场景更具优越性:①耗时操作:邮件发送/短消息发送;②系统解耦:系统A与系统B存在交互,如果A挂了,但B可以继续使用;③日志。
2 程序开发结构
在功能上将实现如下功能点:①客户端SDK(软件开发包)在Queue以及Topic模式下发送消息;②消息接受方支持主动轮询以及消息驱动;③消息队列管理后台可以创建、删除、更新Queue和Topic;④支持内存以及文件存储消息。
3 支持消息分发机制JAVA CLIENT API
JAVA Client API以JAR的方式提供给应用程序使用:
1)收发消息。引用mq.jar、mq-jms.jar、mq-jms.jar。客户端是通过接口MQService来进行收发消息的,有两种途径获取MQService的实例:①通过MQServiceCreator类的静态方法getMQService();②通过spring配置文件获取。获取MQService的实例后,直接调用该接口的sendMessage和receiveMessage方法即可。目前,通过 MQServiceCreator类创建的MQService实例仅仅支持本地事务,如果需要使用JTA的事务,请通过修改spring的配置,使用 XAPooledConnectionFactory连接池来支持JTA事务。
2)监听消息(MDP)。①继承AbstractMessageHandler,创建一个消息处理器,实现handlerMessage方法处理消息;②通过Spring配置或直接创建消息监听器。
3)消息驱动Bean(MDB)。①继承BaseMDBBean创建MDB,类为空即可;②继承AbstractMessageHandler,创建一个消息处理器,实现handlerMessage方法处理消息;③通过Spring配置消息处理器;④MDB的classpath下必须包含一个名为beanFactory.xml的spring配置文件,在该spring配置文件中import该MDB所有需要加载的spring配置文件。
4)JMS实现Request-Response。通过Spring的基于JMS的远程服务暴露的方式,很容易实现JMS的同步访问,具体步骤如下:①创建服务接口;②客户端通过JmsInvokerProxyFactoryBean创建访问服务的Proxy;③服务端实现服务接口;④服务端通过JmsInvokerServiceExporter暴露服务;⑤此部署模型可根据不同业务系统的要求,制定部署模型;⑥同时实现了负载均衡机制,用以保障性能;⑦同时实现了Master-Slave集群机制保障,可靠性得以保障。
4 MQ通用框架性能
在消息持久化情况下:①在Queue模式,1K消息大小,单个MQ实例吞吐量达到1000/s;②在Topic模式,1K消息大小,单个MQ实例吞吐量达到2000/s。
因此随着业务的发展,业务系统也越来越复杂,面临着各种各样的数据集成和系统整合。系统之间的交互日趋复杂,所以迫切需要推出消息中间件来降低业务系统和功能模块相互交互的复杂度,降低业务系统和功能模块间的耦合,为业务系统和功能模块之间的交互提供统一的、健壮的、可扩展的、可靠的、高可用的底层传输服务。
消息中间件就是应运松偶合的概念而产生的,主要以队列和发布订阅为消息传输机制,以异步的方式将消息可靠的传输到消费端的一种基础产品。
MQ(Message Queue)消息中间件作为一个基础传输中间件已经问世好多年的历史了,他主要应用于分布式系统中,在分布式系统中,存在着许多异构环境、不同的开发语言和不同的传输协议,所以要实现这些系统之间的通信是一个相当复杂的工程。消息中间件就是为了解决这些问题,把这些问题从应用中分离出来,形成一个专门的底层系统软件,使分布式环境对我们应用开发人员来说是透明的。
消息中间件在整个软件应用集成系统中可以具有如下的优点:①异步通信;②生命周期松耦合;③复杂性低N;④开发维护成本低;⑤可提供可靠的传输。这个特点可以说是消息中间件的立足之本,对于应用来说,只要成功把数据提交给消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责;⑥可实现不重复传输。也就是断点续传功能,特别适合网络不稳定的环境,节约网络资源;⑦消息驱动。收到消息后主动通知消息接收方;⑧支持事务。应用程序可以把一些数据更新组合成一个工作单元,这些更新通常是逻辑相关的,为了保障数据完整性, 所有的更新必须同时成功或者同时失败(撤消)。
1 Active MQ
我们给予的消息基于Apache的ActiveMQ提供消息服务,ActiveMQ外界一致认为是最成熟最稳定的开源MQ产品,其性能不亚于SonicMQ等商业产品。目前版本是5.3.0,在下一个版本中将加入AIO,性能将会得到再次提升。
MQ通用框应用于下列场景更具优越性:①耗时操作:邮件发送/短消息发送;②系统解耦:系统A与系统B存在交互,如果A挂了,但B可以继续使用;③日志。
2 程序开发结构
在功能上将实现如下功能点:①客户端SDK(软件开发包)在Queue以及Topic模式下发送消息;②消息接受方支持主动轮询以及消息驱动;③消息队列管理后台可以创建、删除、更新Queue和Topic;④支持内存以及文件存储消息。
3 支持消息分发机制JAVA CLIENT API
JAVA Client API以JAR的方式提供给应用程序使用:
1)收发消息。引用mq.jar、mq-jms.jar、mq-jms.jar。客户端是通过接口MQService来进行收发消息的,有两种途径获取MQService的实例:①通过MQServiceCreator类的静态方法getMQService();②通过spring配置文件获取。获取MQService的实例后,直接调用该接口的sendMessage和receiveMessage方法即可。目前,通过 MQServiceCreator类创建的MQService实例仅仅支持本地事务,如果需要使用JTA的事务,请通过修改spring的配置,使用 XAPooledConnectionFactory连接池来支持JTA事务。
2)监听消息(MDP)。①继承AbstractMessageHandler,创建一个消息处理器,实现handlerMessage方法处理消息;②通过Spring配置或直接创建消息监听器。
3)消息驱动Bean(MDB)。①继承BaseMDBBean创建MDB,类为空即可;②继承AbstractMessageHandler,创建一个消息处理器,实现handlerMessage方法处理消息;③通过Spring配置消息处理器;④MDB的classpath下必须包含一个名为beanFactory.xml的spring配置文件,在该spring配置文件中import该MDB所有需要加载的spring配置文件。
4)JMS实现Request-Response。通过Spring的基于JMS的远程服务暴露的方式,很容易实现JMS的同步访问,具体步骤如下:①创建服务接口;②客户端通过JmsInvokerProxyFactoryBean创建访问服务的Proxy;③服务端实现服务接口;④服务端通过JmsInvokerServiceExporter暴露服务;⑤此部署模型可根据不同业务系统的要求,制定部署模型;⑥同时实现了负载均衡机制,用以保障性能;⑦同时实现了Master-Slave集群机制保障,可靠性得以保障。
4 MQ通用框架性能
在消息持久化情况下:①在Queue模式,1K消息大小,单个MQ实例吞吐量达到1000/s;②在Topic模式,1K消息大小,单个MQ实例吞吐量达到2000/s。