常用消息中间件简介

news2024/9/20 18:37:07

83f52ae972e445a6b5a0d1e99953b1cc.jpg一、 分布式系统消息通信技术简介

 

分布式系统消息通信技术主要包括以下几种:

 

1. RPC(Remote Procedure Call Protocol).

一般是C/S方式,同步的,跨语言跨平台,面向过程

 

2. CORBA(Common Object Request Broker Architecture).

CORBA从概念上扩展了RPC。面向对象的,企业级的(面向对象中间件还有DCOM)

 

3. RMI(Remote Method Invocation).

面向对象方式的 Java RPC

 

4. WebService.

基于Web,C/S或B/S,跨系统跨平台跨网络。多为同步调用, 实时性要求较高

 

5. MOM(Message oriented Middleware).

面向消息中间件,主要适用于消息通道、消息总线、消息路由和发布/订阅的场景。目前主流标准有JMS(Java Message Service)、AMQP(Advanced Message Queuing Protocol)和STOMP(Streaming Text Oriented Messaging Protocol)。

 

JMS是Java平台上的面向接口的消息规范,是一套API标准,并没有考虑异构系统。AMQP是一个面向协议的,跟语言平台无关的消息传递应用层协议规范。STOMP是流文本定向消息协议,是一种为MOM设计的简单文本协议。AMQP和STOMP都是跟http处于同一层的协议。

 

在 AMQP 模型中,消息的 producer 将 Message 发送给 Exchange,Exchange 负责交换 / 路由,将消息正确地转发给相应的 Queue。消息的 Consumer 从 Queue 中读取消息。

 

AMQP 系统构架

 

 

 

 

 

二、 常见开源跨平台MQ简介

目前业界上关于消息中间件的实现多达好几十种,可谓百花齐放,所用的实现语言同样也五花八门。下面挑选了一部分,在网上开源社区相对容易搜索出来的十多种MQ来作简单介绍。

 

开源MQ

 

概述

 

1.Qpid

 

Apach的一个开源AMQP实现,broker架构,有C++和Java两个版本

 

2.RabbitMQ

 

LShift 用Erlang实现,支持多协议,broker架构,重量级

 

3.ZeroMQ

 

AMQP最初设计者iMatix公司实现,轻量消息内核,无broker设计。C++实现

 

4.Jafka/Kafka

 

LinkedIn用Scala语言实现,支持hadoop数据并行加载

 

5.ActiveMQ

 

Apach的一种JMS具体实现,支持代理和p2p部署。支持多协议。Java实现

 

6.Apollo

 

ActiveMQ的下一代产品,支持多协议,Scala实现

 

7.Redis

 

Key-value NoSQL数据库,有MQ的功能

 

8.MemcacheQ

 

国人利用memcache缓冲队列协议开发的消息队列,C/C++实现

 

9.Open-MQ

 

C++和QT实现,支持JMS

 

10.ActiveMQ-CPP

 

ActiveMQ的C++纯客户端库,用于跟ActiveMQ通信

 

11.MQ4CPP

 

一个C++实现的MQ,信息甚少

 

12.MetaQ

 

Alibaba对Kafka的改造,增加事务支持等新特性,用纯Java实现

 

13.Beanstalkd

 

一个类memcached协议设计的消息队列,C/C++实现

 

14.OpenAMQ

 

iMatix公司AMQP1.0的实现,类似rabbitMQ。C++实现。2010年项目放弃

 

15.Spread Toolkit

 

高性能的分布式分组消息系统,C++实现

 

16.SAFMQ

 

C++实现的储存转发消息队列中间件

 

17. Mosquitto

 

一个轻量级的IBM物联网连接协议的消息中间件实现,C/C++实现

 

18.MUSCLE

 

提供一个多路消息服务器和消息对象传递功能,支持C/C++

 

19.JORAM

 

一个类似OpenJMS(Sun OpenMQ)的JMS消息中间件,JAVA实现

 

 

 

Qpid

 

 

Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。

 

它提供了 C++ 和 Java 两个版本的 broker服务端,并支持多种语言的客户端。C++版本的服务器端具备高性能/低消耗以及RDMA支持;而Java版本的服务器则支持JMS。Qpid 还提供了一些额外的特性:

 

采用 Corosync 来保证了集群环境下的 Fault-tolerant 特性

支持 XML 类型的 Exchange,当消息格式为 XML 时,可以利用 Xquery 进行过滤

支持 plugin,用户可以方便地增加新的功能,比如新的 exchange 类型

提供了安全认证特性,任何 producer/consumer 需要和 broker 通信时,都需要提供身份认证。QPID 的安全认证使用 SSL 协议。

 

授权协议: Apache

 

开发语言: Java C/C++

 

操作系统: 跨平台

 

官网:http://qpid.apache.org 最新版本0.30发布于2014-09-26。

 

 

 

有新浪的朋友比较推荐Qpid,它比rabbitmq要轻型,比zeromq保险点!各方面的文档都比较健全。目前在openstack中作为一种可选的消息中间件服务配置。MB(WSO2 Message Broker) 基于Apache Qpid,这是一个Java项目。开源的企业服务总线(ESB) – Celtix,基于Apache Incubator项目Qpid。

 

跟Qpid有关联的其他项目主要有:

 

ActiveMQ and AMQP using Qpid Proton

 

Apache Camel and AMQP using Qpid

 

Apache Axis and AMQP using Qpid

 

Microsofe Azure using Qpid Proton

 

Apache软件基金会一级开源项目入选Qpid is a top-level project at Apache

 

Pulp 2.5程序库内容管理工具里集成有Qpid.

 

Fedora默认使用Qpid作为消息队列

 

 

 

 

 

RabbitMQ

 

 

LShift 用Erlang编写的一个开源的消息队列,支持很多的协议:AMQP,XMPP, SMTP, STOMP,重量级,更适合于企业级的开发。代理(Broker)架构,对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。

 

缺点:可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。

 

AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型:

 

 

 

授权协议: MPL

 

开发语言: ErLang

 

操作系统: 跨平台

 

官网:http://www.rabbitmq.com/,最新版本3.4.3发布于2015-1-7

 

 

 

ØMQ(ZeroMQ)

 

 

早期需要设计可靠消息系统比如AMQP,但是这种方式引入了single-point broker。对于需要这种可靠消息系统的应用来说,需要在broker上面做相当多的事情确保可靠性以及性能。但是这样对于中小应用陷入了尴尬,为了使用这种方便的消息系统他们需要引入broker这么东西是不能够忍受的。我们需要的一种简单方便的消息传输系统,没有任何附加代价(比如所有数据都流经 broker),这就是ZeroMQ设计初衷。

 

2010年3月30日,AMQP的最初设计者iMatix公司的首席执行官Pieter Hintjens宣布iMatix将退出AMQP工作组,而且为了简单得多,快的多的ZeroMQ,将不支持可能发布的AMQP/1.0。一个非常轻量级的消息内核,专门为高吞吐量/低延迟的场景开发。ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。没有中间件架构,应用程序端点扮演了这个服务角色。部署简单,仅提供非持久性的队列。与RabbitMQ相比,ØMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口。

 

支持C、C++、Python、.NET /Mono、Fortran和Java语言

 

授权协议: LGPL

 

开发语言: C/C++

 

操作系统: 跨平台

 

官网:http://zeromq.org/, 最新版本4.1.0发布于2014/10/14。Twitter的Storm中使用ZeroMQ作为数据流的传输,还有常见于金融界的应用中。Mongrel2是使用ZeroMQ的一个Web服务器。

 

 

 

Jafka/Kafka

 

 

LinkedIn用Scala语言开发。高吞吐量高性能支持跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的。快速持久化、高吞吐、完全的分布式系统、支持Hadoop数据并行加载。

 

 

 

授权协议: Apache

 

开发语言: Scala

 

操作系统: 跨平台

 

 

 

ActiveMQ

 

 

居于两者(RabbitMQ & ZeroMQ)之间,类似于ZeroMQ,它可以部署于代理模式和P2P模式。完全支持JMS1.1和J2EE 1.4规范。跨平台的,多种语言和协议编写客户端,Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire, Stomp REST, WS Notification, XMPP, AMQP。如需配置ActiveMQ则需要在目标机器上安装Java环境。支持集群,同等网络,自动检测,TCP,SSL,广播,持久化,XA,多个消息也可以组成原子事务

 

缺点:默认的配置性能偏低,需要优化配置,但是配置文件复杂,本身不提供管理工具;示例代码非常少;主页上的文档看上去比较全面,但是缺乏一种有效的组织方式,文档只有片段,用户很难由浅入深进行了解,二来文档整体的专业性太强。

 

授权协议: Apache

 

开发语言: Java

 

操作系统: 跨平台

 

 

 

Apollo

 

 

ActiveMQ的下一代产品为Apollo,Apollo以ActiveMQ原型为基础,是一个更快、更可靠、更易于维护的消息代理工具。Apache称Apollo为最快、最强健的STOMP(Streaming Text Orientated Message Protocol,流文本定向消息协议)服务器。

 

l Apollo的特性如下:

 

l 支持Stomp 1.0和Stomp 1.1协议

 

l 主题和队列

 

l 队列浏览器

 

l 主题持久订阅

 

l 镜像队列

 

l 可靠的消息传递

 

l 消息过期和交换

 

l 消息选择器

 

l JAAS验证

 

l 基于ACL的授权

 

l 支持SSL/TLS,证书验证

 

l REST Management API

 

http://activemq.ap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/565079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个命令搞定Linux大文件下载

问题 Linux下log日志太大了,下载太慢了,即使下载下来,打开也费劲,咋办?将某文件夹打包成xx.tar.gz包,但依然很大,公司无法下载这么大的压缩包,咋办? split 以上2个问题…

[golang gin框架] 37.ElasticSearch 全文搜索引擎的使用

一.全文搜索引擎 ElasticSearch 的介绍,以 及安装配置前的准备工作 介绍 ElasticSearch 是一个基于 Lucene 的 搜索服务器,它提供了一个 分布式多用户能力的 全文搜索引擎,基于 RESTful web 接口,Elasticsearch 是用 Java 开发的,并作为 Apac…

PIC18F26单片机波特率配置

只需要配置以下三个寄存器: BRGCON1 BRGCON2 BRGCON3 BRGCON10x07; > 0000 0111 BRGCON20x90; > 1001 0000 BRGCON30x42; > 0101 0010 BRGCON1: Sync_Sog (bit7~bit6)1TQ,BRP(bit5~bit0)1 ,则TQ((2*(BRP1))/Fosc16/32M&am…

Mysql存储时间,对应Api及对应的java属性

1.Mysql存储时间的类型 常用的储存时间/日期的类型: DATE:仅用于存储日期值(年、月、日),格式为YYYY-MM-DD。TIME:仅用于存储时间值(小时、分钟、秒),格式为HH:MM:SS。DA…

朴素贝叶斯算法实现英文文本分类

目录 1. 作者介绍2. 朴素贝叶斯算法简介及案例2.1朴素贝叶斯算法简介2.2文本分类器2.3对新闻文本进行文本分类 3. Python 代码实现3.1文本分类器3.2 新闻文本分类 参考(可供参考的链接和引用文献) 1. 作者介绍 梁有成,男,西安工程…

【UE】连续射击Niagara特效

效果 步骤 1. 新建一个粒子系统 选择“来自所选发射器的新系统” 添加“Fountain” 2. 打开这个新建的粒子系统 选中“Initialize Particle”模块,将颜色设置为(100,0,0) 再让生成的粒子大一些 选中“Spawn Rate”模块,将粒子的…

如何编写接口自动化框架系列之unittest测试框架的详解(二)

在编写自动化框架过程中 ,我们首先想到的就是选择一个合适的测试框架 ,目前常用的测试框架有unittest和pytest , unittest比较简单,适合入门着学习 ;而pytest比较强大,适合后期进阶 。本文主要介绍的就是unittest框架 …

pytorch笔记(十)Batch Normalization

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117一、Batch Normalize 作用 加快收敛、提升精度:对输入进行归一化,从而使得优化更加容易减少过拟合:可以减少方差的偏移可以使得神经网络使用更高的学习率:BN 使得神经网络更加稳定,从而可以使用更大的学习率,加速训练过程…

Chapter5: SpringBoot与Web开发2

接上一篇 Chapter4: SpringBoot与Web开发1 10. 配置嵌入式Servlet容器 SpringBoot默认采用Tomcat作为嵌入的Servlet容器;查看pom.xml的Diagram依赖图: 那么如何定制和修改Servlet容器的相关配置? 下面给出实操方案。 10.1 application.properties配…

依赖范围和编译classpath、测试classpath、运行classpath的关系

最近学习maven,这里看了下别人解释的区别原文,机翻一下,看的懵懵懂懂的 这其实应该是一个简单的区别,但我一直在Stackoverflow上回答一连串类似的问题,而人们往往会误解这个问题。 那么,什么是classpath&am…

[CF复盘] Codeforces Round 874 (Div. 3) 20230520】

[CF复盘] Codeforces Round 874 (Div. 3 20230520 总结A. Musical Puzzle![在这里插入图片描述](https://img-blog.csdnimg.cn/01ab8d835b4343659e8b80680dd9d639.png)2. 思路分析3. 代码实现 B. Restore the Weather1. 题目描述2. 思路分析3. 代码实现 C. Vlad Building Beaut…

FinClip | 2023 年 4 月产品大事记

我们的使命是使您(业务专家和开发人员)能够通过小程序解决您的关键业务流程挑战。不妨让我们看看在本月的产品与市场发布亮点,看看它们如何帮助您实现目标。 产品方面的相关动向👇👇👇 全新版本的小程序统…

知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用12-食谱领域智能问答系统,实现菜谱问答,本项目基于py2neo和neo4j图数据库,将知识图谱应用于菜谱领域。通过构建菜谱知识图谱,实现简单的菜谱食材问答系统。用户可以通过问答系统,快速获取简单的菜谱食材信息。 一…

Vivado综合属性系列之十一 GATED_CLOCK

目录 一、前言 二、GATED_CLOCK 2.1 属性说明 2.2 工程代码 2.3 综合结果 一、前言 在工程设计中,时钟信号通常来源于专用的时钟单元,如MMCM和PLL等。但也存在来自逻辑单元的信号作为时钟,这种时钟信号为门控时钟。门控时钟可以降低时…

Linux下V4l2框架编程_USB摄像头数据采集

Linux内核版本:3.5.0 1.1 V4L2简介 v4L2是针对uvc免驱usb设备的编程框架,主要用于采集usb摄像头等。 这篇文章介绍V4L2框架读取摄像头数据的流程,介绍ioctl常用的命令参数,以及各种摄像头相关的结构体成员含义,最终完成数据采集。 编程模式如下: V4l2支持多种设备,它可…

项目管理PMP好考吗,没有经验?

现在越来越多的产品经理和开发人员也投入到考PMP的大军中,在真实的项目中也会有很多产品经理兼任项目经理的职责,这点还是比较常见的,如果说产品或者开发人员考了PMP证书,本身也会让你在找工作的大军中更具有优势,俗话…

模电基础学习

模拟电路基础 计算机工作原理 用电去控制电,这是计算机工作的核心原理。 电学基础 软件编程更新迭代特别的快,而硬件的学习可能很多年都没有变化,越老越吃香。电路设计好比老中医,学会一个套路就可以用一辈子,因为电路设计是基于物理学原理一直都没有变化过,现在最常用…

SSM编程---Day 01

目录 一、Maven简介 (一)软件开发中的阶段 (二)Maven能做什么 (三)没有使用maven怎么管理依赖 (四)什么是maven (五)maven中的概念 二、Maven的核心概…

【面试题】计算机网络面试实战

version:1.0 文章目录 计算机网络网络分层模型🙎‍♂️面试官:网络为什么要分层?🙎‍♂️面试官:TCP/IP 各层的结构与功能?🙎‍♂️面试官:OSI体系模型的结构和功能&…

AI歌手是否能够取代传统歌手,成为主流音乐的新宠?

⭐ “AI歌手”走红背后:谁在训练它?歌迷为何爱听?⭐ 这种新型演艺模式能否获得广泛的市场认可?⭐ AI歌手会取代流行歌手成为主流吗?⭐ AI还在哪些方面有应用呢? 你听过AI歌手吗?近日&#xff0c…