当前位置: 首页 > news >正文

【RabbitMQ】异步消息及Rabbitmq安装

https://blog.csdn.net/weixin_73077810/article/details/133836287
https://www.bilibili.com/video/BV1mN4y1Z7t9/

同步调用和异步调用

如果我们的业务需要实时得到服务提供方的响应,则应该选择同步通讯(同步调用)。
如果我们追求更高的效率,并且不需要实时响应,则应该选择异步通讯(异步调用)

同步调用的优势:时效性强,等待到结果后才返回。
同步调用的问题:1、拓展性差 2、性能下降 3、级联失败问题

异步调用方式是基于消息通知的方式,一般包含三个角色:
消息发送者:投递消息的人,就是原来的调用方
消息Broker:管理、暂存、转发消息,你可以把它理解成微信服务器
消息接收者:接收和处理消息的人,就是原来的服务提供方

在异步调用中,发送者不再直接同步调用接收者的业务接口,而是发送一条消息投递给消息Broker。然后接收者根据自己的需求从消息Broker那里订阅消息。每当发送方发送消息后,接受者都能获取消息并处理。 这样,发送消息的人和接收消息的人就完全解耦了。
在这里插入图片描述
假如每个微服务的执行时长都是50ms,则原来整个业务的耗时可能高达300ms
在这里插入图片描述
使用消息队列后,业务耗时仅仅100ms,大大提高了业务性能。

异调用的优势:
1、耦合度低,拓展性强
2、异步调用,无需等待,性能好
3、故障隔离,下游服务故障不影响上游业务
4、缓存消息,流量削峰填谷

异步调用的问题:
1、不能立即得到调用结果,时效性差
2、不确定下游业务执行是否成功
3、业务安全依赖于Broker的可靠性

技术选型

消息Broker,目前常见的实现方案就是消息队列(MessageQueue)
在这里插入图片描述

rabbitmq安装

centos7先安装docker

# yum 包更新到最新
yum update
# 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
yum install docker-ce -y
# 安装后查看docker版本
docker -v
# 安装加速镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0wrdwnn6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker安装Rabbitmq

docker pull docker.io/rabbitmq:3.8-management# 创建并运行容器、启动RabbitMQ管理插件
# docker run -di --name=myrabbit -p 15672:15672 rabbitmq:management
# 运行该命令后,Docker 会下载 RabbitMQ 镜像(如果本地没有的话),然后创建并启动一个名为 myrabbit 的容器,该容器使用了指定的端口映射和环境变量配置。您可以通过访问 http://ip:15672 来访问 RabbitMQ 的管理界面,并使用 admin/admin 进行登录
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:3.8-management# 查看容器,获取到rabbitmq容器ID
docker ps -a
# 启动容器
docker start 容器ID# 查看日志
docker logs -f myrabbit

在这里插入图片描述

相关文章:

  • ardupilot开发 --- Jetson Orin Nano 后篇
  • 阿里云 邮件系统DNS域名解析 搭配 postfix+dovecot 邮件服务器
  • 打印水仙花数
  • 数据挖掘与分析——数据预处理
  • IMU用于飞行坐姿校正
  • 【中文】PDF文档切分\切片\拆分最优方案-数据预处理阶段,为后续导入RAG向量数据库和ES数据库实现双路召回
  • 29.Netty进阶-黏包半包
  • C++类和对象总结
  • Oracle--存储结构
  • Springboot整合Kafka消息队列服务实例
  • thinkphp单独为某个接口设置缓存
  • 预期和视角之外是什么?
  • 01--MySQL数据库概述
  • vue3自动导入---组件库elements-ui,vuetify以及scss样式的自动导入
  • 【C++11 之强类型枚举enum class/struct 基本结构及应用场景】了解在enum基础上增加了什么
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Android系统模拟器绘制实现概述
  • canvas绘制圆角头像
  • leetcode-27. Remove Element
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • nginx 负载服务器优化
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 从tcpdump抓包看TCP/IP协议
  • 从重复到重用
  • 技术胖1-4季视频复习— (看视频笔记)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何利用MongoDB打造TOP榜小程序
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 跳前端坑前,先看看这个!!
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • !$boo在php中什么意思,php前戏
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • (7)svelte 教程: Props(属性)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (回溯) LeetCode 78. 子集
  • (实战篇)如何缓存数据
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Linux整合apache和tomcat构建Web服务器
  • .bat批处理(一):@echo off
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net framework4与其client profile版本的区别
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .Net Remoting常用部署结构
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .Net插件开发开源框架
  • .NET项目中存在多个web.config文件时的加载顺序