微服务学习(1):RabbitMQ的安装与简单应用

news2025/4/16 15:04:24

目录

RabbitMQ是什么

为什么要使用RabbitMQ

RabbitMQ的安装

RabbitMQ架构及其对应概念

队列的主要作用

交换机的主要作用

RabbitMQ的应用

通过控制面板操作(实现收发消息)


RabbitMQ是什么

RabbitMQ是一个开源的消息队列软件(消息代理),实现了高级消息队列协议(AMQP)。它允许不同应用系统之间、以及分散系统中的各个组件之间通过消息传递进行通信和数据交换,从而实现松耦合的系统设计。RabbitMQ支持多种消息协议,易于在分布式系统中使用,具有高可用性和可扩展性。

为什么要使用RabbitMQ

使用RabbitMQ在项目中,主要是为了优化系统间通信的方式,特别是在处理同步调用和异步调用时具有明显的优势。

  1. 提高系统的响应速度:对于一些不需要立即返回结果的操作,通过RabbitMQ实现异步调用可以显著减少用户的等待时间。例如,用户注册成功后发送欢迎邮件,这类操作可以通过消息队列异步执行,避免了同步等待导致的延迟。

  2. 解耦系统组件:通过消息队列,生产者(发送方)和消费者(接收方)之间实现了松耦合。这意味着它们可以独立地扩展和修改,而不会互相影响。比如订单系统与库存系统,通过RabbitMQ进行交互,即使将来库存系统的接口发生变化,只要消息格式不变,订单系统无需做任何修改。

  3. 增强系统的可靠性和稳定性:当使用同步调用时,如果被调用的服务不可用,则可能导致整个流程失败。而使用RabbitMQ进行异步调用,消息可以先存储在队列中,待服务恢复后再进行处理,从而提高了系统的容错能力。

  4. 支持负载均衡和扩展性:RabbitMQ允许同一类型的消息被多个消费者消费,这样可以根据实际需要动态增加或减少消费者来应对不同的负载情况,实现资源的有效利用。

RabbitMQ的安装

基于Docker来安装RabbitMQ,使用下面的命令即可:

docker run \
 -e RABBITMQ_DEFAULT_USER=mqtest \
 -e RABBITMQ_DEFAULT_PASS=123456 \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3.8-management

安装命令中有两个映射的端口:

15672:RabbitMQ提供的管理控制台的端口

5672:RabbitMQ的消息发送处理接口

安装完成后,启动RabbitMQ

docker start mq

docker logs -f mq

我们访问 http://192.168.12.101:15672即可看到管理控制台。(注意:填写你自己的虚拟机地址)

首次访问需要登录,默认的用户名(mqtest)和密码(123456)在配置文件中,可以修改。

登录后页面如图所示:

RabbitMQ架构及其对应概念

RabbitMQ对应的架构如图:

publisher:生产者,也就是发送消息的一方

consumer:消费者,也就是消费消息的一方

queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理

exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。

virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

队列的主要作用

消息存储:队列是存储消息的地方。生产者将消息发送到队列中,消费者从队列中读取消息进行处理。

保证消息顺序:在一个队列内部,消息的处理遵循先进先出(FIFO)原则,确保了消息被按照发送的顺序消费。

负载均衡:当有多个消费者订阅同一个队列时,队列可以实现负载均衡的功能,即每个消息只会被一个消费者接收并处理,从而分散工作负载。

交换机的主要作用

路由选择:交换机决定了消息应该被发送到哪些队列。它根据一定的规则(例如消息的路由键和绑定到交换机的队列的绑定键之间的匹配关系)来决定消息的去向。

直连交换机(Direct Exchange):通过精确匹配路由键将消息路由到队列。

扇形交换机(Fanout Exchange):忽略路由键,将消息广播给所有绑定到该交换机的队列。

主题交换机(Topic Exchange):允许使用通配符对路由键进行模式匹配,以更灵活的方式路由消息。

RabbitMQ的应用

通过控制面板操作(实现收发消息)

(1)我们打开Queues选项卡,新建一个队列:填写name,然后点击Add queue.

(2)点击Exchanges选项卡,点击amq.fanout交换机,进入交换机详情页,然后点击Bindings菜单,在表单中填写要绑定的队列名称,点击Bind。

(3)再次回到exchange页面,找到刚刚绑定的amq.fanout,点击进入详情页,再次发送一条消息:

回到Queues页面,可以发现hello.queueTest中已经有一条消息了,点击队列名称,进入详情页,查看队列详情,这次我们点击get message,可以看到消息到达队列了。

解读:实现交换机发送信息到绑定的队列上了。

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

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

相关文章

Starrocks入门(二)

1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

Electron一小时快速上手

1. 什么是 Electron? Electron 是一个跨平台桌面应用开发框架,开发者可以使用 HTML、CSS、JavaScript 等 Web 技术来构建桌面应用程序。它的本质是结合了 Chromium 和 Node.js,现在广泛用于桌面应用程序开发。例如,以下桌面应用都使用了 El…

算法004——盛最多水的容器

力扣——盛最多水的容器点击即可跳转 当我们选择1号线和8号线时,下标为 1 和 8 形成容器的容积的高度是由 较矮的决定的,即下标为 8 的位置; 而宽度则是 1到8 之间的距离,为 8-17,此时容器的容积为 7 * 7 49。 当我…

Java Web-Filter

Filter 在 Java Web 开发中,Filter(过滤器)是 Servlet 规范中的一个重要组件,它可以对客户端与服务器之间的请求和响应进行预处理和后处理。以下从多个方面详细介绍 Java Web 中的 Filter: 一、概念和作用 概念&…

DeepSeek-R1训练时采用的GRPO算法数学原理及算法过程浅析

先来简单看下PPO和GRPO的区别: PPO:通过奖励和一个“评判者”模型(critic 模型)评估每个行为的“好坏”(价值),然后小步调整策略,确保改进稳定。 GRPO:通过让模型自己生…

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)

七星棋牌源码 是一款运营级的棋牌产品,覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区,支持 安卓、iOS 双端,并且 全开源。这个版本是 修复优化后的二开版本,新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…

CSDN博客导出设置介绍

在CSDN编辑博客时,如果想导出保存到本地,可以选择导出为Markdown或者HTML格式。其中导出为HTML时有这几种选项:jekyll site,plain html,plain text,styled html,styled html with toc。分别是什…

音视频-WAV格式

1. WAV格式说明: 2. 格式说明: chunkId:通常是 “RIFF” 四个字节,用于标识文件类型。(wav文件格式表示)chunkSize:表示整个文件除了chunkId和chunkSize这 8 个字节外的其余部分的大小。Forma…

apload-lab打靶场

1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包&#xff0c;将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上传.htaccess文件&#xff0…

sentinel详细使用教学

sentinel源码地址&#xff1a; https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D sentinel官方文档&#xff1a; https://sentinelguard.io/zh-cn/docs/introduction.html Sprong Cloud alibaba Sentinel文档【小例子】 : https://github.com/alibaba/spring-cl…

python django

官网地址 https://www.djangoproject.com/ 安装 控制台输入命令 pip install django 或者可以指定版本号 pip install django3.2.4 创建项目 在控制台找个目录存放生成好的项目&#xff0c;输入命令 django-admin startproject demo_django 然后用pycharm打开项目可以…

SuperMap iClient3D for WebGL 影像数据可视范围控制

在共享同一影像底图的服务场景中&#xff0c;如何基于用户权限体系实现差异化的数据可视范围控制&#xff1f;SuperMap iClient3D for WebGL提供了自定义区域影像裁剪的方法。让我们一起看看吧&#xff01; 一、数据制作 对于上述视频中的地图制作&#xff0c;此处不做讲述&am…

OpenHarmony4.1-轻量与小型系统ubuntu开发环境

因OpenHarmony官网提供包含轻量、小型与标准系统的全量代码非常宠大&#xff0c;解包后大概需要70G以上硬盘空间&#xff0c;如要编译标准系统则需要140G以上空间。 如硬盘空间有限与只使用轻量/小型OpenHarmony系统&#xff0c;则可以下载并直接使用本人裁剪源码过的ubuntu硬盘…

秒杀系统的常用架构是什么?怎么设计?

架构 秒杀系统需要单独部署&#xff0c;如果说放在订单服务里面&#xff0c;秒杀的系统压力太大了就会影响正常的用户下单。 常用架构&#xff1a; Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀&#xff0c;正常情况下&#xff0c;这 10 个商品应该均…

LabVIEW中三种PSD分析VI的区别与应用

在LabVIEW的声音与振动分析工具包中&#xff0c;SVFA Power Spectral Density VI、SVFA Power Spectral Density Subset VI 和 SVFA Zoom Power Spectral Density VI 均用于信号频域分析&#xff0c;但它们在功能、适用场景和操作逻辑上存在显著差异。以下从区别、应用场合、注…

蓝桥杯备考:动态规划入门题目之下楼梯问题

按照动态规划解题顺序&#xff0c;首先&#xff0c;我们要定义状态表示&#xff0c;这里根据题意f[i]就应该表示有i个台阶方案总数 第二步就是 确认状态转移方程&#xff0c;画图分析 所以实际上f[i] 也就是说i个台阶的方案数实际上就是第i-1个格子的方案数第i-2个格子的方案数…

【树莓派学习】树莓派3B+的安装和环境配置

【树莓派学习】树莓派3B的安装和环境配置 文章目录 【树莓派学习】树莓派3B的安装和环境配置一、搭建Raspberry Pi树莓派运行环境1、下载树莓派镜像下载器2、配置wifi及ssh3、SSH访问树莓派1&#xff09;命令行登录2&#xff09;远程桌面登录3&#xff09;VNC登录&#xff08;推…

算法题(83):寄包柜

审题&#xff1a; 需要我们对模拟柜子的数组进行插入数据和打印数据的操作 思路&#xff1a; 首先我们观察题目&#xff0c;发现可以用一个数组表示一个柜子&#xff0c;而数组中每个索引的位置可以看成是一个个格子。但是柜子的数据量是1e5&#xff0c;且格子的数据量是1e5.如…

深入浅出MySQL:概述与体系结构解析

目录 1. 初识MySQL 1.1. 数据库 1.1.1. OLTP&#xff08;联机事务处理&#xff09;1.1.2. OLAP&#xff08;联机分析处理&#xff09; 2. SQL 2.1. 定义2.2. DQL&#xff08;数据查询语言&#xff09;2.3. DML&#xff08;数据操纵语言&#xff09;2.4. DDL&#xff08;数据定…