[转帖]消息队列中间件-常用的 MQ

消息,队列,中间件,常用,mq · 浏览次数 : 0

小编点评

**RabbitMQ** - RabbitMQ 是一个开源的分布式消息队列系统。 - RabbitMQ 支持多种语言客户端,用于在分布式系统中存储转发消息,对路由、负载均衡和数据持久化都有很好的支持。 - RabbitMQ 中比较重要的几个概念包括 Producer、Consumer、Broker、Queue、Exchange、Binding、Routing Key、Vhost、Channel、Message acknowledgment。 **ActiveMQ** - ActiveMQ 是 Apache 出品的、最流行的、开源的分布式消息队列系统。 - ActiveMQ 支持多种语言客户端,支持数据的持久化、XA 消息和事务。 **RocketMQ** - RocketMQ 是阿里巴巴出品的开源的分布式消息队列系统。 - RocketMQ 支持亿级消息堆积能力,能够撑住双十一的大流量,支持回溯消费,可以在 broker 端进行消息过滤。 **Kafka** - Kafka 是一个高吞吐量的分布式发布订阅消息系统。 - Kafka 可以处理网站中的所有动作流数据。 **ZeroMQ** - ZeroMQ 是一个简单好用的传输层,它使得 Socket 编程更加简单、简洁和性能更高。

正文

RabbitMQ

RabbitMQ 是开源的分布式消息队列系统,用 erlang 语言开发。RabbitMQ 是 AMQP 的标准实现。

AMQP(Advanced Message Queuing Protocol)高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计。

AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全性。

消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

RabbitMQ 支持多种语言客户端,如:python、Ruby、.NET、Java、C、php 等,用于在分布式系统中存储转发消息,对路由、负载均衡和数据持久化都有很好的支持,是一款成熟的消息中间件。

RabbitMQ 中比较重要的几个概念:

  • Producer:消息的生产者,就是生成消息将其投递(写入)到队列的程序。
  • Consumer:消息的消费者,就是从队列中获取消息进行消息处理的程序。
  • Broker:经纪人,就是消息队列服务器实体。
  • Queue:队列,就是消息的载体,每个消息可以被投递到一个或多个队列中。
  • Exchange:消息的交换机,它指定消息按什么规则,路由到哪个队列。
  • Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
  • Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
  • Vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
  • Channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
  • Message acknowledgment:消息回执(消息确认)是指消费者在消费完消息后手动发送一个回执(ack)给 RabbitMQ,RabbitMQ 收到 ack 回执后,才会把消息从内存中删除(实质上是先打上删除标记,之后再删除)。

RabbitMQ 支持消息的持久化,也就是将数据保存到磁盘,为了数据安全考虑,需要进行持久化,防止 RabbitMQ 在重启或宕机后的消息丢失。

RabbitMQ 持久化包括 3 个部分:

  • exchange 持久化,在声明时指定 durable => 1
  • queue 持久化,在声明时指定 durable => 1
  • message 持久化,在投递时指定 delivery_mode => 2(1是非持久化)

如果 exchange 和 queue 都是持久化的,那么它们之间的 binding 也是持久化的。如果 exchange 和 queue 两者之间有一个持久化,一个非持久化,就不允许建立绑定。

ActiveMQ

ActiveMQ 是 Apache 出品的、最流行的、开源的分布式消息队列系统,用 Java 语言开发。

ActiveMQ 是一个完全支持 JMS1.1 和 2EE 1.4 规范的 JMS Provider 实现。

ActiveMQ 支持多种语言客户端,如:python、Ruby、.NET、Java、C、php 等,支持数据的持久化、XA 消息和事务,是一款成熟的消息中间件。

RocketMQ

RocketMQ 是阿里巴巴出品的开源的分布式消息队列系统,用 Java 语言开发。

2016 年 11 月,阿里巴巴将 RocketMQ 捐赠给 apache。

RocketMQ 支持亿级消息堆积能力,能够撑住双十一的大流量,支持回溯消费,可以在 broker 端进行消息过滤,是一款比较成熟的消息中间件。

Kafka

Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像 Hadoop 一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka 的目的是通过 hadoop 的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。

一般应用在大数据日志处理或对实时性(少量延迟)、可靠性(少量丢数据)要求稍低的场景使用。

ZeroMQ

ZeroMQ 是一个简单好用的传输层,像框架一样的一个 socket library,它使得 Socket 编程更加简单、简洁和性能更高。它是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。

ZMQ 的明确目标是成为标准网络协议栈的一部分,之后进入 Linux 内核。

与 RabbitMQ 相比,ZMQ 并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,更像一个底层的网络通讯库,在 Socket API 之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的 API 接口。支持 Request-Reply,Publisher-Subscriber,Parallel Pipeline 三种基本模型和扩展模型。

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览7863 人正在系统学习中

与[转帖]消息队列中间件-常用的 MQ相似的内容:

[转帖]消息队列中间件-常用的 MQ

RabbitMQ RabbitMQ 是开源的分布式消息队列系统,用 erlang 语言开发。RabbitMQ 是 AMQP 的标准实现。 AMQP(Advanced Message Queuing Protocol)高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计。 AMQP

[转帖]Kafka常见使用场景与Kafka高性能之道

https://juejin.cn/post/6958997115012186119 消息队列使用场景 队列,在数据结构中是一种先进先出的结构,消息队列可以看成是一个盛放消息的容器,这些消息等待着各种业务来处理。 消息队列是分布式系统中重要的组件,kafka就可以看做是一种消息队列,其大致使用场景:

[转帖]从理论到实践,异步I/O模式下NVMe SSD高性能之道

在早期NVMe的讨论话题中,常常将之AHCI协议进行对比,在支持的最大队列深度、并发进程数以及消耗时钟周期数等方面,NVMe吊打了AHCI。最直观也最权威的就是下面这张对比图片。 NVMe与AHCI协议对比(来源:sata-io.org) SATA的发展最早可以追溯到上世纪80年代的IDE/ATA,

[转帖]消息队列中间件-概述

1. 简介 MQ(Message Queue)消息队列是一种应用程序对应用程序的通信方法,应用程序通过读(出队)写(入队)队列的消息(针对应用程序的数据)进行通信。 MQ是消费者-生产者模型的典型代表,生产者往消息队列中不断写入消息,而消费者则可以读取或者订阅队列中的消息,并进行消息处理。 消息队列

[转帖]RabbitMQ基础概念详细介绍

https://www.jianshu.com/p/e55e971aebd8 AMQP简介 AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦和通讯。 AMQP的主要

[转帖]RabbitMQ 的重要概念(术语)

Message 消息指的是 RabbitMQ 的队列中保存的数据。 Producer 消息的生产者,即 message publisher(sender),是指负责创建和发送消息的程序。 Vhost RabbitMQ 的虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离

[转帖]RabbitMQ 死信队列

https://blog.csdn.net/lamp_yang_3533/article/details/111463928 死信交换机 DLX(Dead-Letter-Exchange)可以称之为死信交换机,也称之为死信邮箱。 当消息在一个正常的业务队列中变成死信(dead message)之后,

[转帖]RabbitMQ学习笔记04:Publish/Subscribe

参考资料:RabbitMQ tutorial - Publish/Subscribe — RabbitMQ 前言 在 RabbitMQ学习笔记03:Work Queues 中,每个进入队列中的消息只会被投递给一个消费者进程。而在这篇文章中,我们将会把一条消息同时投递给多个消费者进程。这种模式也叫做p

[转帖]RabbitMQ服务优化,修改最大连接数

https://www.cnblogs.com/hoyeong/p/16242202.html RabbitMQ的优化RabbitMQ的连接数是压垮消息队列的一个重要的指标。所以在平时使用OpenStack平台的过程中,如果大量的用户同时创建虚拟机,会导致云平台创建报错,其实就是消息队列服务的崩溃。

[转帖]RabbitMQ 如何保证交换机中的消息不丢失

我们知道,生产者会先将消息发送给交换机,但是如果交换机此时没有匹配到相关的队列时,交换机中的消息就会出现丢失的问题。 那么,如何保证交换机中的消息不丢失呢? mandatory 参数 当 basicPublish 方法的 mandatory 参数设为 true 时,如果交换器无法匹配到绑定的队列,那