ActiveMQ技术预研报告
研究部朱懋柱
1.文档介绍
1.1 文档目的
对前期进行的ActiveMQ研究进行总结和分享ActiveMQ方面的心得。
1.2 文档范围
适合技术中心技术人员,可以作为技术参考。
1.3 参考文档
ActiveMQ官方网站 http://activemq.apache.org/
开源中国社区 http://www.oschina.net/p/activemq
百度百科 http://baike.baidu.com/view/157103.htm?fr=ala0_1_1
1.4 术语与缩写解释
缩写、术语 | 解 释 |
MQ | 消息队列,很多时候指消息中间件服务器 |
ActiveMQ | ActiveMQ是一个开放源码基于Apache 2.0 licenced 发布并实现了JMS 1.1的消息中间件 |
JMS | jms即Java消息服务(Java Message Service),一种协议标准 |
URI | 资源标志符(Uniform Resource Identifier, 简称”URI”) |
2. 研究背景介绍
为了快速有效的丰富汇讯的功能,减少开发时间和开发成本,我们将web的技术融合起来,技术融合中出现一个问题就是消息实时通知汇讯客户端的处理消 息的流转。简单的方法可以通过web服务器和IM服务器进行直连来完成通信,但这样的架构方案让web和IM过于依赖,为了提供更好的扩展性,降低耦合, 考虑引入消息中间件来作为两者的中介,减少依赖,由此我们需要对消息中间件进行一些分析和研究。
3. 技术说明
ActiveMQ是一个开放源码基于Apache 2.0 licenced 发布并实现了JMS 1.1的消息中间件,应用中引入中间件的好处是减少服务器之间的依赖关系,提高扩展性,在没有引入消息中间件的情况可能出现如下图所示:
出现服务器多依赖的情况,不方面扩展,而引入消息中间件后如
从图中可以看出引入消息中间件后,每个服务器只依赖于消息中间件,而且在应用中这种依赖关系式一种弱依赖关系,为什么这么讲呢?请看下节对消息中间件的分享报告。
4.ActiveMQ的技术分析
ActiveMQ实现了sub/pub(订阅/发布)的机制,实现jms协议,sub/pub属于设计模式中典型的观察者模式,每台服务器只需要订阅自己 希望得到的消息,而不必要轮询服务器是否有自己需要的消息,也不需要知道消息发布者是谁,而发布消息的一端也不需知道谁是消息的接收端,有多少给接受者, 这些都不重要,只要将消息发布到消息中间件就可以了。
ActiveMQ消息发布和订阅的类型分为BytesMessage(二进制消息流的方式)、MapMessage(一种键值对方式的消息)、 ObjectMessage(一种序列化对象的消息形式)、TextMessage(字符流的消息类型),可以根据需要进行消息类型选择,当然对于同一个 消息发布/订阅双方需要采用一致的消息类型,同一个服务器可以采用多种消息格式,不过不同的消息格式需要奖励不同的发布/和订阅者。这样一来应用就相当灵 活,可以根据需要进行类型选择,不过选择ObjectMessage类型的时候应该注意,这个消息类型主要是序列化的Java对象,所以不支持不同的语言 进行类型数据交换。
ActiveMQ应用程序接口(摘自百度百科)
ConnectionFactory 接口(连接工厂)
l 用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。 管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。
Connection 接口(连接)
l 连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目标。
Destination 接口(目标)
l 目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。
MessageConsumer 接口(消息消费者)
l 由会话创建的对象,用于接收发送到目标的消息。消费者可以同步地(阻塞模式),或异步(非阻塞)接收队列和主题类型的消息。
MessageProducer 接口(消息生产者)
l 由会话创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。
Message 接口(消息)
l 是在消费者和生产者之间传送的对象,也就是说从一个应用程序创送到另一个应用程序。一个消息有三个主要部分:
l 消息头(必须):包含用于识别和为消息寻找路由的操作设置。
l 一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。
l 一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。
l 消息接口非常灵活,并提供了许多方式来定制消息的内容。
Session 接口(会话)
l 表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持事 务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话允 许用户创建消息生产者来发送消息,创建消息消费者来接收消息。
MessageListener接口(消息监听者)
l 这是为一个消息消费者的消息监听接口,生产者必选设置消息监听者,否则消息将不处理,当客户端接收到消息后,会通过调用消息监听者的接口来进行相应的消息处理,一般在开发过程中通过重载的方式重新定义监听着的onMessage虚接口,来完成消息的监听和处理。
5.ActiveMQ的C++客户端的实现
ActiveMQ提供了c++的client开发库支持,这样我们实现起来就比较简单了,下面我们来看看发布和订阅的简单例子。
5.1 pub(发布)端的简单实现过程
首先根据传入的URI创建一个发布接口,创建过程如下:
然后调用发布接口发布消息,发布过程如下:
5.2 sub(订阅)端的简单实现过程
订阅者的创建过程和发布者的创建过程基本一样,不过最后创建的不是生产者接口,而是消息消费者接口(MessageConsumer),创建流程如下:
在实现时,我们重载消息消费者的监听者,并设置消息消费者的监听接口为我们实现的监听接口,再重载监听者onMessage接口来进行消息处理。这样,只 要客户端接收到消息,就会调用我们的监听者的onMessage接口,我们就可以在这个接口进行相应的处理,完成消息接收处理过程。
5.3 消息处理过程
a) 消息订阅
需要订阅某主题的客户端实现订阅过程,产生消息消费者的监听者实例,并实现消息处理过程。
b) 消息发布
需要发布消息的客户端实现消息发布的过程,等到一个生产者实力,并通过生产者接口向消息中间件发布消息。
c) 服务器消息转发
消息中间件服务器收到生产者发送过来的消息后,查找是否有该类型主题消息的订阅者,有则分别发送消息。
d) 订阅者消息处理
订阅者客户端收到消息中间件服务器发送过来的的消息后,调用监听者onMessage接口完成消息处理
6.总结
对ActiveMQ的研究尚浅,也许有些理解不当之处,欢迎大家指出,一起学习,消息中间件在跨语言和跨平台,服务器间解耦都起到了比较到的作用。值得我们去学习,在此感谢所有提供免费网络资源的网站,感谢开源中国社区。
相关推荐
### SpringCloud微服务预研知识点整理 #### 一、微服务概述 微服务架构是一种将单个应用程序开发成一套小型服务的方法,每项服务都运行在其独立的进程中,并且使用轻量级通信机制(通常是HTTP资源API)进行交互。...
* 解决重要项目中关键架构问题和技术难题,负责项目中关键技术难点攻关和预研 * 对开发团队进行技术指导和培训,规范开发流程 任职资格: * 精通 Java 语言,对相关技术领域开源产品有深入理解 * 精通领域建模,...
chromedriver-win32-136.0.7070.0.zip
内容概要:该文档详细介绍了智慧平安城市综合服务平台的需求规格,旨在整合多源异构信息,为警务、安防和社会公共信息服务提供技术支持。平台涵盖用户认证、视频监控、安全监测、政务服务、交通服务、社区服务等多个功能子系统。针对不同终端(如电脑端、手机端和大屏端),提供了定制化的展示和管理功能,并支持与其他第三方系统的接口对接,确保系统的全面性和可扩展性。此外,还明确了平台的高可靠性和高性能要求。 适用人群:项目管理人员、研发人员、测试人员及系统运维团队,主要用于理解和指导智慧平安城市的建设及运营。 使用场景及目标:智慧平安城市综合服务平台的设计和实施旨在增强城市管理效率和服务水平,提高市民生活质量,保障公共安全。通过整合和优化城市各部门资源,提升突发事件的响应和处理能力,构建更加和谐、安全的社会环境。 其他说明:项目要求平台能够处理大量并发请求,在确保数据安全的前提下快速响应各类服务请求,特别是在公共安全领域的智能化辨识及预警方面表现出较高准确性。此外,平台还需要具备良好的用户体验设计,方便各类用户群体操作使用。
内容概要:该文档是一份详细的《系统需求分析说明书》,旨在规划一个针对教育领域的教师信息管理系统。它详尽地阐述了项目的目标和意义在于提升师资管理部门的工作效率和服务质量,确保教职工工资发放的公平性,并通过优化信息管理简化日常操作流程。主要内容涵盖从功能需求如新员工入职、转正考核、教师查询等功能模块的具体流程设计,到非功能性的规定,包括安全措施、辅助指导等方面的内容,以及项目的实施时间安排计划,提供了系统开发的全方位指南,同时配合了直观易懂的用例图表来辅助理解和执行具体的操作步骤。 适合人群:本需求分析报告适用于项目经理、系统分析师、程序员和其他参与或关注教师信息管理系统建设的相关人士。 使用场景及目标:这份需求分析书将被用作指导教师信息系统开发工作的核心参考材料,在项目启动之初作为团队成员沟通的基础文件,帮助相关人员明确各自的任务方向,确定各项工作的完成标准及时限;另外也是日后系统运维、升级扩展的重要依据,对促进后续开发迭代有着重要意义。 其他说明:为了更好地满足实际需求,文中还包括了与业务密切相关的术语解释(词汇表),确保文档内的专业用语得到统一规范表达;同时也提供了一些辅助材料,像思
类似购物前后台管理系统,适合小白练习及自己添加更改
【介绍】 斗兽棋,或动物象棋,由两名玩家(红与黑)进行游戏。游戏的目的是在棋盘两端的对手巢穴中放置一块棋子。你也可以通过夺取对手的所有棋子来获胜。 移动-每件作品都可以向前、向后、向左或向右移动一步,但有一些规则。除了老鼠,没有其他动物可以进入河中,而狮子和老虎可以横向或前后跳过河。通过单击一个块(应出现一个蓝色框)并单击目标方块来移动块。只需将棋子移动到对手占据的方格上,即可捕获每个棋子。如果移动是非法的,棋盘将不会对你的第二次点击做出反应。你不能进入自己的巢穴。 捕捉片段-每个片段对应一种动物,即老鼠、猫、狗、狼、豹、老虎、狮子和大象,并按此顺序排列。每只动物只能捕捉到一只排名较低或与自己同等的动物。例外的是,大象不能抓老鼠,而老鼠可以抓大象。任何一块在河里都无法捕捉到另一块。如果两只老鼠都在河里,一只老鼠可以抓住另一只老鼠。 陷阱-巢穴周围的三个方块,标记为“陷阱”,充当对手棋子的陷阱。任何占据其中一个陷阱的对手棋子都会失去其排名,并可能被任何动物捕获。 老鼠、猫、狗、狼、豹、老虎、狮子、大象。
系统采用B/S架构,集成Spring Boot(后端)、Vue.js(前端)和MySQL(数据库),通过RESTful API实现前后端分离。采用MyBatis-Plus优化数据访问,模块化设计与自动配置提升开发效率,结合数据库索引和读写分离确保性能,Element UI提供友好交互,整体具备高扩展性和可维护性。
特易通国产对讲机MD-398 v1.0中英写频软件
数据结构学习
操作系统学习
数据结构学习
内容概要:该文档是一份关于‘信息资源整合及应用服务平台’需求规格说明书的详尽描述,涵盖项目的总体介绍、业务分析、系统需求、功能模块需求和部署环境等多个方面。文中明确了项目目标是对异构信息资源进行全面整合,并提供了详细的架构设计,确保用户在统一平台上享受高效的资源配置和服务体验。此外还介绍了平台的关键技术工具如TRSWCM和HyBase的使用,及各子系统间协作流程,强调了信息收集渠道多样化及其智能化管理水平。 适用人群:面向项目建设方(即负责系统建设和部署的组织或团队),相关用户和技术人员。 使用场景及目标:为建设‘信息资源整合及应用服务平台’提供建设指导和功能需求分析,明确项目范围、质量标准及开发任务分工;同时有助于相关人员更好地理解该平台的工作机制和应用场景。其他说明:此需求说明书亦可用于指导平台未来的维护和技术升级工作。 其他说明: 包含对系统管理、登录管理、日志管理等多个模块的详细说明,并对每个模块的功能进行了细致划分与介绍。文档末尾附带需求跟踪矩阵,用来监测各个阶段的任务完成情况和进度管理。
图书馆自助借还机使用感受
系统采用B/S架构,集成Spring Boot(后端)、Vue.js(前端)和MySQL(数据库),通过RESTful API实现前后端分离。采用MyBatis-Plus优化数据访问,模块化设计与自动配置提升开发效率,结合数据库索引和读写分离确保性能,Element UI提供友好交互,整体具备高扩展性和可维护性。
操作系统学习
功能描述: 就业管理员则负责岗位类型、招聘信息以及简历投递等流程的管理,保障了招聘流程的顺畅和有效。企业用户通过系统发布招聘信息、管理收到的简历,并组织面试流程。学生用户可管理个人资料、投递简历、接收面试邀请并查看面试结果,为他们的就业之路提供便利和支持。 更多详细信息:https://blog.csdn.net/u011832806/article/details/145713085 本项目是基于Springboot+Vue开发的高校毕业生就业信息管理系统,高分通过项目,已获导师指导。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。也可作为课程设计、期末大作业 标价包含:项目源码、万字LW、数据库脚本、开发说明文档、安装部署视频、代码讲解视频、全套软件等,该项目可以直接作为毕设使用。 项目都经过严格调试,确保可以运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的政府管理系统实现了字典管理、公告管理、公文管理、会议室管理、会议室预约管理、来访登记管理、信访督办管理、用户管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让政府管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:信息管理,时效性,安全性,MySql
操作系统学习
GD32F407完整bootloader与app代码