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

目录

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,可以看到消息到达队列了。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

综合实验处理表格

新建excel表格,输入信息,另存为csv文件。 利用notepad打开csv文件,可以观察格式 目标:通过编程处理文件,实现对数据的处理,成绩求和以及评价 对数据逐行处理,读一行,处理一行&#…

【leetcode hot 100 560】和为K的子数组

解法一&#xff1a;用左右指针寻找字串&#xff0c;如果和>k&#xff0c;则减少一个数&#xff08;left&#xff09;&#xff1b;如果和<k&#xff0c;则加上一个数&#xff08;right&#xff09;。 class Solution {public int subarraySum(int[] nums, int k) {int nu…

STM32CubeMx DRV8833驱动

一、DRV8833驱动原理 ​ STBY口接单片机的IO口&#xff0c;STBY置0电机全部停止&#xff0c;置1才能工作。STBY置1后通过AIN1、AIN2、BIN1、BIN2 来控制正反转。 AIN1AIN2电机状态00停止1speed反转speed1正转11停止 其中A端&#xff08;AIN1与AIN2&#xff09;只能控制AO1与…

Android 图片压缩详解

在 Android 开发中,图片压缩是一个重要的优化手段,旨在提升用户体验、减少网络传输量以及降低存储空间占用。以下是几种主流的图片压缩方法,结合原理、使用场景和优缺点进行详细解析。 效果演示 直接先给大家对比几种图片压缩的效果 质量压缩 质量压缩:根据传递进去的质…

JavaWeb后端基础(3)

原打算把Mysql操作数据库的一些知识写进去&#xff0c;但是感觉没必要&#xff0c;要是现在会的都是简单的增删改查&#xff0c;所以&#xff0c;这一篇&#xff0c;我直接从java操作数据库开始写&#xff0c;所以这一篇大致就是记一下JDBC、MyBatis、以及SpringBoot的配置文件…

ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地表覆盖图的矢量化是一项至关重要的任务。天地图作为中国国家级的地理信息服务平台&#xff0c;提供了丰富且详尽的地表覆盖数据。然而&#xff0c;这些数据通常以栅格格式存在&#xff0c;不利于进行空间分析和数据…

TP-LINK路由器如何设置网段、网关和DHCP服务

目标 ①将路由器的网段由192.168.1.XXX改为192.168.5.XXX ②确认DHCP是启用的&#xff0c;并将DHCP的IP池的范围设置为排除自己要手动指定的IP地址&#xff0c;避免IP冲突。 01-复位路由器 路由器按住复位键10秒以上进行重置操作 02-进入路由器管理界面 电脑连接到路由器&…

基于Spring Boot的供应商管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3) 前言本篇摘要12. LangChain原理及agents构建Gradio UI12.3 LangChain架构12.3.1 LangChain12.3.2 Integration Packages1. 概念2. 示例12.3.3 LangGraph1. 概念2. 示例12.3.4 LangGraph Platform1. 概览2. 优势分…

通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句

问题描述 在使用 LangChain 和 Llama 模型生成 SQL 查询时&#xff0c;遇到了 sqlite3.OperationalError 错误。错误信息如下&#xff1a; OperationalError: (sqlite3.OperationalError) near "sql SELECT Name FROM MediaType LIMIT 5; ": syntax error [SQL: …

【每天认识一个漏洞】url重定向

&#x1f31d;博客主页&#xff1a;菜鸟小羊 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 常见应用场景 主要是业务逻辑中需要进行跳转的地方。比如登录处、注册处、访问用户信息、订单信息、加入购物车、分享、收…

SQL命令详解之数据的查询操作

目录 1 简介 2 基础查询 2.1 基础查询语法 2.2 基础查询练习 3 条件查询 3.1 条件查询语法 3.2 条件查询练习 4 排序查询 4.1 排序查询语法 4.2 排序查询练习 5 聚合函数 5.1 一般语法&#xff1a; 5.2 聚合函数练习 6 分组查询 6.1 分组查询语法 6.2 分组查询…

IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题

文章目录 引言一、安装Proxy AI1.1 在线安装Proxy AI1.2 离线安装Proxy AI 二、Proxy AI中配置DeepSeek2.1 配置本地部署的DeepSeek&#xff08;Ollama方式&#xff09;2.2 通过第三方服务商提供的API进行配置 三、效果测试 引言 许多开发者尝试通过安装Proxy AI等插件将AI能力…

Spring Boot3+Vue3极速整合: 10分钟搭建DeepSeek AI对话系统(进阶)

Spring Boot3Vue3极速整合: 10分钟搭建DeepSeek AI对话系统(进阶) 前言 在上次实战指南《Spring Boot3Vue2极速整合: 10分钟搭建DeepSeek AI对话系统》引发读者热议后&#xff0c;我通过200真实用户反馈锁定了几个问题进行优化进阶处理&#xff1a; 每次对话都需重复上下文背…

【Qt-信号与槽】connect函数的用法

&#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;Qt Creator &#x1f680;所属专栏&#xff1a;Qt 文章目录 1.信号和槽的概念1.1 信号的本质1.2 槽的本质1.3 补充说明2. 信号和槽的使用2.1 connect函数介绍2.2 connect函数的简单使用2.2.1 图形化方…

服务器IPMI用户名、密码批量检查

背景 大规模服务器部署的时候&#xff0c;少不了较多的网管和监测平台&#xff0c;这些平台会去监控服务器的性能、硬件等指标参数&#xff0c;为了便于管理和控制&#xff0c;则需要给服务器IPMI带外管理添加较多的用户&#xff0c;这就需要对较多的服务器检查所对应的IPMI用…

数字内容体验平台核心技术八大对比评测

数字内容体验技术解析 在数字化浪潮中&#xff0c;数字内容体验的底层技术架构已成为企业提升用户粘性与运营效率的核心驱动力。当前行业主流的数据分析引擎通过实时采集用户交互数据&#xff0c;结合机器学习模型进行深度挖掘&#xff0c;可精准识别内容偏好与行为模式&#…

《动手学习深度学习》的笔记

1.什么是机器学习? 机器学习是:换句话说,我们用数据训练(train)模型。 数据不断的训练出比较好的模型。 1.2 机器学习的关键零件 1.学习的数据。 2. 如何转换数据的模型。 3.一个目标函数。 4.调整模型参数以优化目标函数的算法。 1,数据有什么组成? 数据=样本+…

Linux《基础开发工具(上)》

在之前的篇章当中我们已经了解了Linux当中基本的指令以及相关的知识&#xff0c;那么接下来在本篇当中就开始学基本的开发工具&#xff0c;在此我们一共要了解6大开发工具&#xff0c;在此将这些工具的学习分为上中下篇&#xff0c;在本篇当中我们首先要来学习的是yun以及vim,一…

鸿蒙开发第4篇__关于在鸿蒙应用中使用Java语言进行设计

本博文对于鸿蒙APP程序员来说&#xff0c;很重要 HarmonyOS从 API8 开始不再支持使用Java作为开发语言&#xff0c;未来的新功能将在ArkTS中实现. API 8对应的是HarmonyOS 3.0.0版本。请看下图&#xff1a; 因此&#xff0c; 读者如果看到类似《鸿蒙应用程序开发》(2021年版本…