基于CORBA的JAVA消息服务中间件的设计与优化(1)(2)
2014-09-09 01:23
导读:3 CJMQ的系统结构3.1 CJMQ的外部体系结构如图2所示,CJMQ提供了三种API以满足管理、Java应用和C++应用的需要,它们的通信协议采用标准的CORBA IIOP协议以保
3 CJMQ的系统结构3.1 CJMQ的外部体系结构如图2所示,CJMQ提供了三种API以满足管理、Java应用和C++应用的需要,它们的通信协议采用标准的CORBA IIOP协议以保证CJMQ的开放型以及和其他系统的互操作性。由于OMG会逐步扩展各种语言向CORBA的映射,因此CJMQ也会增加支持其他语言的客户端API。CJMQ有一个数据存储层,用以存储持久消息、系统配置参数、连接信息等数据,它可以通过JDBC访问SQL Server、Oracle、Sybase等关系数据库。
3. 2CJMQ的内部体系结构图3显示了CJMQ消息服务的内部主要结构。客户应用程序通过调用CJMQ提供的JMS函数库同CJMQ服务器通信。接收客户请求的是ORB Adaptor,它是一个通信层,在对接收的请求或者消息简单判断后,立即将该消息或者请求转发给适当的处理者。如果是发送者发送的消息,就将该消息放入到发送消息队列中;如果是接收者的应答消息,则将该消息放入到应答队列中;而如果是建立连接或者建立新的队列(queue)、主题(topic)的请求,则分别将请求转发给连接管理器(connection manager)和目标管理器(destination manager)。Message queue模块包含发送消息队列和应答消息队列以及持久消息管理器。由ORB adaptor转发的消息按类别分别进入这两个队列中。发送消息队列按照消息优先级排序,使最高优先级的消息排在最前面以尽快优先处理。同时,持久消息管理器根据消息头部持久属性的值来决定是否将消息存储在数据库中。如果是,则通过数据库连接池中的数据库连接将持久消息存储到数据库中。当CJMQ由于异常原因崩溃重新启动后,在初始化阶段会将持久消息读入消息队列中。采用何种线程策略向消息接收者发送消息对于系统的性能有着至关重要的影响。既可以采用一个客户一线程,也可以采用一个队列一线程或者采用线程池。一个客户一线程策略适用于客户数较少的情况,当客户数很多时,大量的线程会严重消耗系统资源,导致系统性能很差;一个队列一线程策略适用于消息较少的情况,当队列中消息数较多时,单线程来不及处理,导致系统传输消息的效率很低。我们的设计采用了线程池的策略。dispatcher thread pool有一个线程数上限MaxThreadNum,该参数可以由管理员配置。系统初始化时生成一定数目的派发线程,由调度器调度这些线程发送消息队列中的消息,如果仍有新的消息到来而线程数不够时,则系统生成新的线程处理消息直到达到设定的MaxThreadNum值。这样可以重用线程池中的线程,避免了前两种策略的缺点。共2页: 1 [2] 下一页 论文出处(作者): (科教论文网 lw.NsEac.com编辑整理)
柔性机器人水下运动的建模与仿真
业务协同项目管理信息系统及其实现机制