RabbitMQ消息队列 安装及基本介绍

一.MQ介绍

        Message Queue (MQ)是一种跨进程的通信机制,用于在系统之间进行传递消息。MQ作为消息中间件,可以进行异步处理请求,从而减少请求响应时间和解耦

1.1 应用场景

1.1.1 系统之间通过MQ进行消息通信,异步解耦

        多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败。

1.1.2 异步处理消息

        应用间并发处理消息,相比串行处理,减少处理时间;

        比如用户注册,系统需要发送注册邮件,验证短信。MQ作为消息中间件,可以进行异步处理请求,从而减少请求响应时间。

1.1.3 肖锋限流

        广泛应用于高并发系统中,避免流量过大导致处理请求阻塞的情况

二.RabbitMQ


        RabbitMQ是支持多种消息协议,易于部署和使用的开源消息代理服务器,用于在分布式系统中存储转发消息。

        RabbitMQ 是一个消息代理,用于在应用程序之间传递消息。它接收、存储并转发消息,允许不同的应用程序之间进行异步通信。

  • 由以高性能、健壮以及可伸缩性出名的Erlang语言编写;
  • 提供了成熟的高并发,高可用的解决方案 可以根据实际业务情况动态地扩展集群节点。
  • 在集群中的机器上设置镜像,使得在部分节点出现问题的情况下仍然可用。
  • 支持多种客户端语言,如:Python、Ruby、.NET、Java等,支持AJAX。
  • RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
MQ产品语言支持并发量消息回溯支持性能协议可靠性
RocketMQJava, C++较高支持良好自定义TCP良好
KafkaJava非常高不支持卓越自定义TCP良好
ActiveMQJava万级不支持一般JMS规范较差

  AMQP:RabbitMQ 实现了高级消息队列协议(AMQP),这是一个开放的、通用的消息协议,支持在分布式系统中可靠地传递消息。

  1. Producer:生产者,即消息的提供者,是发送消息的应用程序
  2. Consumer:消费者,即消息的使用者,接收并处理消息的应用程序。
  3. Message:消息,即进程之间进行通信的数据
  4. Queue:队列,即消息存放的容器,消息以先进先出的方式进行存储,生产者将消息发布到队列,而消费者则从队列中获取消息进行处理。
  5. 交换机:交换机是消息的分发中心,决定将消息路由到哪个队列。生产者将消息发送到交换机,交换机根据规则将消息路由到一个或多个队列。
  6. 绑定:绑定是交换机和队列之间的规则,它定义了如何将消息从交换机路由到特定的队列。
  7. 持久性:RabbitMQ 支持消息的持久性,确保即使在代理重新启动后,消息也不会丢失。
  8. Vhost:虚拟主机,用于存储消息队列。
  9. 虚拟主机vhost是AMQP概念的基础,RabbitMQ包含了开箱即用的默认虚拟主机"/“;
  10.  vhost之间是绝对隔离,保障了队列和交换机的安全性。  

 2.1 mac下 Mq安装

使用homebrew安装rabbitmq

官方文档参考:
The Homebrew RabbitMQ Formula | RabbitMQmac 下的安装命令:

## 更新命令
brew update## 查找
brew search rabbitmq## 安装
brew install rabbitmq## 安装好后,查看rabbitmq的安装信息:
brew info rabbitmq## 后台启动的方式
brew services start rabbitmq## 停止rabbit服务器
brew services stop rabbitmq

2.2 环境变量

Intel Macs,把CLI工具路径设置了软连接,在 /usr/local/sbin
Apple Silicon Macs,在 `/opt/homebrew/sbin ;

rabbitmq-defaults -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-defaults
rabbitmq-diagnostics -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-diagnostics
rabbitmq-env -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-env
rabbitmq-plugins -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-plugins
rabbitmq-queues -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-queues
rabbitmq-server -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-server
rabbitmq-streams -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-streams
rabbitmq-upgrade -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmq-upgrade
rabbitmqadmin -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmqadmin
rabbitmqctl -> ../Cellar/rabbitmq/3.12.2/sbin/rabbitmqctl
vmware-rabbitmq -> ../Cellar/rabbitmq/3.12.2/sbin/vmware-rabbitmq

如果上面的路径没有在PATH里,则需要添加一下:

# for macOS Intel
export PATH=$PATH:/usr/local/sbin# for Apple Silicon
export PATH=$PATH:/opt/homebrew/sbin

2.3 启动:

#方式一:
brew services start rabbitmq;#方式二:进入默认的安装目录下,手动启动

2.4 安装RabbitMQWeb管理界面  

#默认情况下,rabbitmq是没有安装RabbitMQWeb管理界面及授权操作的 
rabbitmq-plugins enable rabbitmq_management
端口用处
5672RabbitMQ通讯端口,也就是连接使用的端口
15672RabbbitMQ管理界面端口,需要开启Management插件

说明:rabbitmq有一个默认账号和密码是:guest 默认情况只能在localhost本机下访问,所以需要添加一个远程登录的用户。

访问:http://ip:15672/本例子是安装本地的,所以这边访问地址:http://localhost:15672/ 

三、Rabbit管理段操作

3.1 进入管理界面

用户名:guest
密码:guest
前提:只有localhost才能访问

3.2创建用户:

#新建用户
rabbitmqctl add_user 账号 密码
#给用户分配操作权限
rabbitmqctl set_user_tags 账号 administrator
#修改密码
rabbitmqctl change_password Username Newpassword 修改密码
#删除用户
rabbitmqctl delete_user Username 删除用户
#查看所有用户
rabbitmqctl list_users 查看用户清单
#为用户设置访问权限
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*" 
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
角色权限说明
超级管理员administrator用户可以做监控所能做的一切,管理用户、vhosts和权限,关闭其他用户的连接,并管理所有vhosts的策略和参数
监控者monitoring可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
策略制定者policymaker可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
普通管理者management仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
其他无法登陆管理控制台,通常就是普通的生产者和消费者。

3.3 创建 Virtual Hosts

选中 Admin 用户设置权限

四、队列的工作模式

模式

交换机

图例

说明

Simple简单模式

 一个生产者对应一个消费者

work工作模式

一对多,每个消费者得到的消息唯一(work模式下最大发挥每个消费者的性能)

发布订阅模式

FANOUT

一对多,生产者将消息发送给交换机,交换机再将消息转发给与之绑定的队列,发布订阅模式对应的交换机类型是FANOUT

Routing路由模式

DIRECT

        一对多,可以根据指定的路由key,将消息发送给不同的队列,交换机类型是DIRECT

Topic主题模式

Topic

 一对多,在Routing路由模式的基础上,可以使用通配符定义路由key

  * 匹配单个字符

   # 匹配任意个字符

一个简单的一个消息推送到接收的流程,提供一个简单的图 

黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手学深度学习(Pytorch版)代码实践 -计算机视觉-41目标检测数据集

41目标检测数据集 import os import pandas as pd import torch import torchvision import matplotlib.pylab as plt from d2l import torch as d2l# 数据集下载链接 # http://d2l-data.s3-accelerate.amazonaws.com/banana-detection.zip# 读取数据集 #save def read_data_b…

Windows 系统 Solr 8.11.3 安装详细教程(最新)

Windows 系统 Solr 8.11.3 安装详细教程 说明什么是Solr下载与解压如何启动启动命令:浏览器中打开dashboard其他命令查看关闭命令 说明 本次只是简单安装,为了在项目中使用,如果在公开服务器中安装需要更改开放端口,配置权限等。 …

【PL理论深化】(8) Ocaml 语言:元组和列表 | 访问元组中的元素 | 列表中的 head 和 tail | 基本列表操作符

💬 写在前面:本章我们将探讨 OCaml 中的元组(tuple)和列表(list),它们是函数式编程语言中最常用的数据结构。 目录 0x00 元组(Tuple) 0x01 访问元组中的元素 0x02 列表&…

《单片机》期末考试复习-学习笔记总结

题型 问答题(15分)编程题(65分)编程题1(20分)编程题2(45分)设计题(20分)一、问答题 1.1.单片机概念和特点 1.2. 51单片机的中断结构 1.3.主从式多机通讯的概念及其工作原理 多机通信是指两台以上计算机之间的数据传输,主从式多机通信是多机通信系统中最简单的一种,…

SerDes介绍以及原语使用介绍(2)OSERDESE2原语仿真

文章目录 前言一、SDR模式1.1、设计代码1.2、testbench代码1.3、仿真分析 二、DDR模式下2.1、设计代码2.2、testbench代码2.3、仿真分析 三、OSERDES2级联3.1、设计代码3.2、testbench代码3.3、代码分析 前言 上文通过xilinx ug471手册对OSERDESE有了简单的了解,接…

PHP爬虫类的并发与多线程处理技巧

PHP爬虫类的并发与多线程处理技巧 引言: 随着互联网的快速发展,大量的数据信息存储在各种网站上,获取这些数据已经成为很多业务场景下的需求。而爬虫作为一种自动化获取网络信息的工具,被广泛应用于数据采集、搜索引擎、舆情分析…

柔性数组(flexible array)

柔性数组从C99开始支持使用 1.柔性数组的概念 概念: 结构体中,结构体最后一个元素允许是未知大小的数组,这就叫[柔性数组]的成员 struct S {int n;char arr[]; //数组大小未知(柔性数组成员) }; 柔性数组的特点: 结构体中柔性…

九、(正点原子)Linux定时器

一、Linux中断简介 1、中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在 Linux 内核中使用一个 int 变量表示中断号。在Linux中,我们可以使用已经编写好的API函数来申请中断号,定义…

基于公有云部署wordpress

云平台选择 腾讯云 阿里云 华为云 项目部署 一、架构讲解 1.1、定义与组成 LNMP是Linux、Nginx、MySQL(或MariaDB)和PHP(或Perl、Python)的首字母缩写,代表在Linux系统下使用Nginx作为Web服务器,MySQL作为…

ai轨迹过京东m端

声明(a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本…

Unity Animator 运行时修改某个动画状态的播放速度

1.添加动画参数,选择需要动态修改速度的动画状态 2.在属性面板种设置速度倍速参数

自然语言处理(NLP)—— 深度学习

1. 词嵌入(Embeddings) 1.1 词嵌入的基本概念 词嵌入(Embeddings)是一种将词语映射到高维空间(比如N300维)的技术,使得词语之间的欧几里得距离与它们的语义距离相关联。这意味着在这个向量空间…

windows MSVC编译安装libcurl

$ git clone https://github.com/curl/curl.git $ cd curl/winbuild依照curl/winbuild/README.md的指示, 启动visual studio的命令行工具,这里要注意别选错. 如果要编译出x64版本的libcurl,就用x64的命令行工具;如果要编译出x86…

论文学习:基于知识图谱的RAG进行客服问答

1.简介 文章名称: Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering(基于知识图谱的RAG进行客服问答) 2.摘要ABSTRACT 在客户服务技术支持中,迅速准确地检索相关的过往问题对于有…

【干货】微信小程序免费开源项目合集

前言 2024年了,还有小伙伴在问微信小程序要怎么开发,有什么好的推荐学习项目可以参考的。今天分享一个收集了一系列在微信小程序开发中有用的工具、库、插件和资源:awesome-github-wechat-weapp。 开源项目介绍 它提供了丰富的资源列表&…

【每日一练】python运算符

1. 算术运算符 编写一个Python程序,要求用户输入两个数,并执行以下运算:加法、减法、乘法、求余、除法、以及第一个数的第二个数次方。将结果打印出来。 a input("请输入第一个数:") b input("请输入第二个数&…

【Java】字节数组 pcm 与 wav 格式互转 (附原理概述)

前言 最近实现了一个文字转语音的功能,语音引擎返回的是pcm格式的数据。需要转化成wav格式前端才能播放。本文首先会给出解决方案,后续会讲背后的原理。 场景 git 仓库 https://github.com/ChenghanY/pcm-wav-converter 1. pcm wav 转化工具类 入参和…

人脑计算机技术与Neuroplatform:未来计算的革命性进展

引言 想象一下,你在某个清晨醒来,准备开始一天的工作,而实际上你的大脑正作为一台生物计算机的核心,处理着大量复杂的信息。这并非科幻电影的情节,而是人脑计算机技术即将带来的现实。本文将深入探讨FinalSpark公司的…

明明设置允许跨域,为什么还会出现跨域请求的问题

一、问题 在微服务项目中,明明已经设置允许跨域访问: 为什么还会出现跨域请求问题? 二、为什么 仔细查看错误提示信息:When allowCredentials is true, allowedOrigins cannot contain the special value "*" since t…

pytest测试框架pytest-html插件生成HTML格式测试报告

Pytest提供了丰富的插件来扩展其功能,pytest-html插件帮助我们生成HTML格式的测试报告,为我们提供直观、有效的测试结果展示。 为了使用 pytest-html,需要满足以下条件: Python 3.6 或更高版本 pytest-html安装 使用pip命令安…