1.RabbitMQ简介

server/2025/3/9 10:34:43/

一、RabbitMQ简介

1、什么是RabbitMQ

1.1.1、简介

RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的、实现了 AMQP(高级消息队列协议)的消息中间件;

RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色;

AMQP协议(http://www.amqp.org)即高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计;

1.1.2、相关网址

官网:https://www.rabbitmq.com

Github:https://github.com/rabbitmq

rabbitmq-java-client:https://github.com/rabbitmq/rabbitmq-java-client

1.1.3、消息中间件

MQ=Message Queue

简单来说消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递

消息中间件一般有三个主要角色:生产者、消费者、消息代理(消息队列、消息服务器);

在这里插入图片描述

rabbitmq-java-client rabbitmq-server rabbitmq-java-client

生产者发送消息到消息服务器,然后消费者从消息代理(消息队列)中获取数据并进行处理;

1.1.4、常用的消息中间件

目前比较主流的几个消息中间件

  • RabbitMQ
  • kafka(大数据领域)
  • RocketMQ(阿里巴巴开源):献给Apache组织
  • pulsar(最近一两年流行起来的)

2、MQ的应用场景

1.2.1、异步提速

在这里插入图片描述

  • 同步是阻塞的(会造成等待)

    采用同步方式,用户从注册到响应成功,需要先保存注册信息,再发送邮件通知,邮件发送成功后再发送短信通知,短信发送成功后才通知用户成功,用户体验不好

  • 异步是非阻塞的(不会等待)

    采用异步方式,保存用户信息后,短信通知和邮件通知消息写入MQ(耗时极短),极大的缩短了响应时间

大流量高并发请求、批量数据传递,就可以采用异步处理,提升系统吞吐量;

1.2.2、系统解耦

多个系统之间不需要直接交互,通过消息进行业务流转;

比如A系统向MQ发送业务消息,其它系统按需接收A系统发送的消息并进行相应的处理即可

省去了A系统调用B系统、调用C系统、调用D系统等过程,实现了系统间的解耦合

在这里插入图片描述

1.2.3、流量削峰

高负载请求/任务的缓冲处理;

当短时间内有大量请求到了,可以将请求发送到消息队列,又客户端匀速的消费消息,不会对系统造成巨大的压力

在这里插入图片描述

1.2.4、日志处理

主要是用kafka这个服务器来做;

日志处理是指将消息队列用于在日志处理中

  • Kafka解决大量日志传输的问题

    loger.info(…)

  • ELK 日志处理解决方案

日志处理是指将消息队列用于在日志处理中

  • Kafka解决大量日志传输的问题

    loger.info(…)

  • ELK 日志处理解决方案

    loger.error(…) -->logstash收集消息–> 发送消息的kafka --> elastic search(es) -->Kibana ELK日志处理平台


http://www.ppmy.cn/server/173090.html

相关文章

yum修改阿里云

第一步:打开FinalShell,点击haodoop100,输入命令: sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 第二步:继续输入命令:sudo yum clean all …

PHP之数组

在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于数组的信息。 PHP中的数组不用指定数据类型,同时索引不一定是数字。 与其说是数组,其实更像map。 创建和输出 $arr array(1, 2, 3); $arr1 [1, 2, 3]; var_dump(…

Java线程池的分析和使用

一、线程池的核心概念 Java 的线程池(Thread Pool)是一种管理和复用线程的机制,它可以有效地控制并发线程的数量,减少线程创建和销毁的开销,提高系统的性能和稳定性。 1.1 线程池的作用 复用线程:避免频…

游戏引擎学习第134天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 到目前为止,由于我们专注于古代游戏的开发,我们还没有深入思考资源应该如何存储以及在最终版本中如何高效管理。因此,在完成游戏的基本框架之前,我们必须先决定如何存储这些资…

数据库系统概论(一)详细介绍数据库与基本概念

数据库系统概论(一)介绍数据库与基本概念 前言一、什么数据库1.数据库的基本概念2.数据库的特点 二、数据库的基本概念1. 数据2. 数据库3.数据库管理系统4.数据库系统 三、数据管理技术的产生和发展四、数据库系统的特点1.数据结构化2.数据共享性3.数据冗…

leetcode day26 重复的子字符串

26 重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例 2: 输入: s "aba" 输出: false示例 3: 输入: s &quo…

如何快速的用pdfjs建立一个网页可以在线阅读你的PDF文件

#如何快速的用pdfjs建立一个网页可以在线阅读你的PDF文件# 也许很多人都用过这个pdfjs,我之前也用过,但是每次配置也是挺麻烦的,于是就写了一个页面远程调用CDN文件,这样一个页面就可以搞定,话不多说直接上代码&#…

03.04、化栈为队

03.04、化栈为队 1、题目描述 实现一个 MyQueue 类,该类用两个栈来实现一个队列。 2、解题思路 本题要求使用两个栈来实现一个队列。队列遵循先进先出(FIFO)的原则,而栈遵循后进先出(LIFO)的原则。因此…