`
zhaohaolin
  • 浏览: 1026101 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ActiveMQ技术预研报告【转】

    博客分类:
  • JMS
阅读更多

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的研究尚浅,也许有些理解不当之处,欢迎大家指出,一起学习,消息中间件在跨语言和跨平台,服务器间解耦都起到了比较到的作用。值得我们去学习,在此感谢所有提供免费网络资源的网站,感谢开源中国社区。

研究部撰写于 2010年07月30日,

分享到:
评论

相关推荐

    SpringCloud微服务预研知识点整理

    ### SpringCloud微服务预研知识点整理 #### 一、微服务概述 微服务架构是一种将单个应用程序开发成一套小型服务的方法,每项服务都运行在其独立的进程中,并且使用轻量级通信机制(通常是HTTP资源API)进行交互。...

    Java架构师的主要职责范围.pdf

    * 解决重要项目中关键架构问题和技术难题,负责项目中关键技术难点攻关和预研 * 对开发团队进行技术指导和培训,规范开发流程 任职资格: * 精通 Java 语言,对相关技术领域开源产品有深入理解 * 精通领域建模,...

    chromedriver-linux64-136.0.7070.0.zip

    chromedriver-linux64-136.0.7070.0.zip

    数据结构_Python实现_浙江大学_教学辅助_1741867717.zip

    数据结构学习

    最长上升子序列(Longest Increasing Subsequence,LIS)动态规划解法的 Python 源码

    最长上升子序列(Longest Increasing Subsequence,LIS)问题是指在一个给定的无序序列中,找到一个最长的单调递增子序列的长度。动态规划的核心思想是通过求解子问题来得到原问题的解。

    全栈 Java 关于全栈开发详解:核心技术、优势及应用场景解析

    内容概要:本文深入探讨了‘全栈’这一软件开发概念。首先明确了全栈不仅仅是指某一个人掌握所有技术,更重要的是拥有跨多个技术领域能力,并能在项目中提供从头到尾的一站式解决方案。文中列举了几项对于全栈开发至关重要技能集,例如:前端(HTML/CSS/Javascript等)、后端(如Python/Django、Java/Spring)、数据库管理以及服务器与部署方面专业知识。同时提到,相比传统分工明确的角色,采用全栈思路可以带来更高的效率、更大的灵活性和更强的整体感知,有助于理解整个系统构架并作出最优决策。最后介绍了全栈开发的一些实际应用场景,在小规模创业企业和大型企业的合作场景中,都能找到其独特的发挥空间;同时也指出成为全栈专家需要持续努力学习,面临着技术覆盖面宽泛所带来的巨大挑战。 适合人群:有兴趣深入了解或者转型成为全栈开发者的程序员。 使用场景及目标:为正在考虑向全能型人才发展的个人提供指导,解释为什么学习全栈开发是有益处的同时给出学习路线图和潜在风险提示。 其他说明:该资料来源于CSDN上的技术博主分享,包含大量真实案例和个人见解,可以帮助有志者更好地规划自己的职业生涯发展道路。

    计算机视觉领域的图像识别技术:从原理到应用场景全解析

    内容概要:本文介绍了图像识别技术的核心原理及主要流程。首先介绍通过摄像头或传感器完成图像获取并转成数字格式,随后通过去噪、增强等一系列预处理操作来提高图片质量。再利用多种方法,特别是深度学习手段比如SIFT,HOG和CNN做关键点如边缘、纹理等的特征提取,用标注过的数据训练模型。经过以上步骤之后进行最终的分类与识别,在这一步骤当中为了使图像得到最精确表达还会涉及非极大值抑制(NMS)、上下文信息利用等后处理操作。除此之外,本文还列举了几项核心技术,即自动提取特征的CNN、加速训练进程的迁移学习方法、定位识别目标物体的技术(YOLO/Faster R-CNN),以及实现像素级的分类(U-net/Mask R-CNN)等。另外还探讨了这一技术的应用领域如人脸检测助力支付验证与安全保障工作、自动驾驶方面对道路车辆和行人的识别,还有医疗影像分析帮助疾病的早期发现以及工业制造中产品检测等多方面的实际应用场景及其发挥的作用。 适合人群:对于图像识别有兴趣的研究人员或从业者;从事相关领域工作,希望通过深入学习理论知识和技术要点提高业务水平的研发工程师或者产品经理。 使用场景及目标:希望读者能够通过对

    最长上升子序列(Longest Increasing Subsequence,LIS)动态规划解法的 java 源码

    最长上升子序列(Longest Increasing Subsequence,LIS)问题是指在一个给定的无序序列中,找到一个最长的单调递增子序列的长度。

    移动开发_iOS_组件化_项目架构搭建教程_1741869992.zip

    数据结构学习

    【Java毕业项目】基于Springboot+vue的高校毕业生就业信息管理系统(包含:源码+万字LW+PPT+数据库文件+开发文档+视频教程(安装部署+代码讲解+修改系统名称等)

    功能描述: 就业管理员则负责岗位类型、招聘信息以及简历投递等流程的管理,保障了招聘流程的顺畅和有效。企业用户通过系统发布招聘信息、管理收到的简历,并组织面试流程。学生用户可管理个人资料、投递简历、接收面试邀请并查看面试结果,为他们的就业之路提供便利和支持。 更多详细信息:https://blog.csdn.net/u011832806/article/details/145713085 本项目是基于Springboot+Vue开发的高校毕业生就业信息管理系统,高分通过项目,已获导师指导。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。也可作为课程设计、期末大作业 标价包含:项目源码、万字LW、数据库脚本、开发说明文档、安装部署视频、代码讲解视频、全套软件等,该项目可以直接作为毕设使用。 项目都经过严格调试,确保可以运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    蓝桥杯嵌入式ADC&LCD(二)

    蓝桥杯嵌入式ADC&LCD(二)

    算法_求和问题_3Sum_4Sum_去重优化_1741868504.zip

    数据结构学习

    基于ConVNeXt 神经网络模型实现的迁移学习、图像识别项目:遥感场景分类网页推理

    该项目是一个基于ConVNeXt模型的图像分类系统,旨在通过深度学习技术实现高效的图像分类任务。系统主要由三个模块组成:模型训练、推理预测和工具函数。首先,train.py脚本负责模型的训练过程,用户可以通过命令行参数设置模型类型、优化器、学习率、批量大小等超参数。训练过程中,脚本会自动进行数据预处理、模型初始化、训练与验证循环,并保存最佳模型权重和训练日志。训练结束后,系统会生成损失曲线、准确率曲线、混淆矩阵、recall、F1、precision、ROC曲线和AUC值等可化结果,帮助用户评估模型性能。其次,infer.py脚本用于推理预测,可以通过Streamlit提供的Web界面上传图像,系统会调用训练好的模型进行图像分类,并返回预测结果及其置信度 本项目训练了30个epoch,精度约为0.84 关于AI改进参考:https://blog.csdn.net/qq_44886601/category_12858320.html

    AUTOSAR以太网交换机驱动(EthSwt)的技术解析与应用场景

    内容概要:本文详细介绍了AUTOSAR EthernetSwitchDriver (EthSwt),这是AUTOSAR架构中用于管理和控制车载以太网交换机的重要模块。文章从多个角度进行了详尽讲解,涵盖架构设计、配置模型、初始化和配置流程以及各个功能的具体实施方式,并深入探讨了EthSwt的状态机运作原理和不同硬件变体的支持情况,强调了标准化和硬件无关的特性。 适合人群:从事汽车电子控制系统及相关领域研究的专业人士、AUTOSAR开发工程师以及对车载网络感兴趣的开发者。 使用场景及目标:①帮助工程师理解和掌握EthSwt的运作机制;②指导如何进行交换机配置与控制;③探索适用于不同类型车辆网络架构的最佳实践。 阅读建议:鉴于文中涉及众多具体细节和技术知识点,建议读者事先熟悉AUTOSAR基本概念,尤其是通信服务子层的内容,以便更好地理解文档所阐述的信息。此外,实际项目开发时可以根据文中提供的配置示例来辅助设计更为合理的解决方案。

    Postman使用指南:从基础入门到高阶功能实践的应用全解

    内容概要:本文全面介绍了Postman这一广泛应用于API测试的强大工具的基本功能和高级特性,包括下载安装、接口测试方法,自动化测试流程设定,通过全局与环境变量提高效率的方法,利用外部文件实现参数化,编写与使用测试脚本进行断言检验,搭建Mock Server模拟未完成的后端API服务,生成详细的API文档便于协作,以及设置性能监控确保系统稳定性的具体步骤。每一个知识点配上了实际的例子进行详细解读,帮助使用者深入理解Postman的各项特性和操作技巧。 适合人群:软件开发工程师,尤其是专注于Web服务或移动应用程序开发的技术人员;QA工程师或从事软件质量保障的专业人士;想要提升API测试能力的所有技术人员。 使用场景及目标:①为正在构建RESTful或其他HTTP风格的网络服务团队提供一个简单而强大的测试平台;②加速前后端分离项目的进展,通过快速建立有效的接口测试计划,减少部署过程中可能出现的问题;③促进持续集成环境下的代码质量提升,借助高效的自动化机制缩短回归测试周期。 其他说明:Postman不仅是一款优秀的接口调试辅助工具,同时也支持高度灵活的工作流整合,例如与Jenkins这样的

    餐饮管理_用户验证_信息维护_系统操作_1741865908.zip

    操作系统学习

    chromedriver-mac-arm64-134.0.6998.88.zip

    chromedriver-mac-arm64-134.0.6998.88.zip

    金融科技领域的软件开发需求说明书模板及实施指南

    内容概要:本文档旨在为‘某某项目’提供全面的产品需求规格说明,适用于金融类产品需求文档编写。文档涵盖从总体介绍、用户群分析、标准规范定义,到各模块特性说明以及风险管理等多个维度的内容,确保技术团队、管理层及其他相关人员对项目的理解和统一认知。特别强调网站建设的功能需求和技术栈的选择,例如采用了PHP、Object C等多种技术和Oracle作为后台支持,并深入剖析了资讯模块和互动模块的具体功能设计与操作流程。 适用于金融产品研发阶段的不同利益相关方,包括但不限于企业高层管理人员、项目经理、开发人员、测试工程师和其他相关人员。他们可以通过该文档了解并掌握即将构建的新产品的完整构想及其详细的实施方案,以便协调各自的任务。 使用场景及目标:该文档主要用于项目启动前期的需求梳理和确认,确保各方就项目的目的、范围达成一致共识,并为其后续设计阶段提供了重要指导方针。同时,在整个项目周期中亦作为沟通桥梁供相关人员参考,特别是涉及到迭代更新或功能调整时更是发挥了关键作用。此外,还用于软件的质量测试基准确立,以确保最终交付品符合预期质量标准。 其它说明:本文档属于公司机密文件,注意保管。

    机器徐诶(预测模型):研究学生抑郁症情况的数据集

    该数据集旨在分析、理解和预测学生的抑郁水平,为心理健康和教育领域的研究提供支持。它涵盖了多种特征,包括人口统计学、学术、生活方式和心理因素,能够帮助研究人员探索影响学生心理健康的各种因素。数据以CSV格式存储,每行代表一名学生的信息,列则包含不同的属性。具体包括:学生的唯一标识符(ID)、年龄、性别、所在城市、平均绩点(CGPA)、睡眠时长、兼职或全职职业、工作压力、学业压力、学习满意度、工作满意度、饮食习惯以及抑郁状态等。数据特点:多维度分析:结合了人口统计学、学术和心理数据,提供了全面了解影响学生心理健康因素的视角。适用性强:适用于心理学家、教育工作者和数据科学家等,可用于心理健康研究、教育洞察以及政策制定支持。、机器学习应用:是训练预测模型以检测抑郁早期迹象的理想选择,有助于及时干预和预防措施的实施。可定制和可扩展:数据集结构支持添加新特征,适合多样化的研究和分析需求。通过该数据集,研究人员可以识别导致学生抑郁的关键因素,如学业压力、工作生活平衡和生活方式等。教育工作者可以了解学业压力和学习满意度对心理健康的影响,从而改善学习环境。此外,它还能为学校、学院和大学的心理健康政策等。

    大型语言模型在疾病诊断中的应用:DeepSeek-R1和O3 Mini在慢性健康状况中的比较研究

    大型语言模型(LLMs)通过提升疾病分类和临床决策能力,正在彻底改变医学诊断领域。在本研究中,我们评估了两种基于LLM的诊断工具——DeepSeek R1和O3 Mini——在包含症状和诊断的结构化数据集上的表现。我们评估了它们在疾病和类别层面的预测准确性,以及其置信度评分的可靠性。DeepSeek R1在疾病层面达到了76%的准确率,总体准确率为82%,优于O3 Mini,后者分别达到72%和75%。值得注意的是,DeepSeek R1在心理健康、神经系统疾病和肿瘤学方面表现出色,准确率达到100%,而O3 Mini在自身免疫疾病分类中也取得了100%的准确率。然而,两种模型在呼吸系统疾病分类上都面临挑战,DeepSeek R1和O3 Mini的准确率分别为40%和20%。此外,置信度评分分析显示,DeepSeek R1在92%的案例中提供了高置信度预测,而O3 Mini则为68%。本研究还讨论了与偏见、模型可解释性和数据隐私相关的伦理问题,以确保LLM负责任地融入临床实践。总的来说,我们的研究结果为基于LLM的诊断系统的优缺点提供了有价值的见解,并为未来人工智能驱动的医疗保健改进提

Global site tag (gtag.js) - Google Analytics