wordpress卸载重装/seo 优化技术难度大吗
2.6日学习打卡
初识RabbitMQ、
一. MQ
消息队列
MQ全称Message Queue(消息队列),是在消息的传输过程中保
存消息的容器。多用于系统之间的异步通信。
- 同步通信相当于两个人当面对话,你一言我一语。必须及时回复
- 异步通信相当于通过第三方转述对话,可能有消息的延迟,但不需要二人时刻保持联系。
消息
两台计算机间传送的数据单位。消息可以非常简单,例如只包含文
本字符串;也可以更复杂,可能包含嵌入对象。
队列
数据结构中概念。在队列中,数据先进先出,后进后出。
二. MQ的优势
应用解耦
在电商平台中,用户下订单需要调用订单系统,此时订单系统还需
要调用库存系统、支付系统、物流系统完成业务。此时会产生两个
问题:
- 如果库存系统出现故障,会造成整个订单系统崩溃。
- 如果需求修改,新增了一个X系统,此时必须修改订单系统的代码。
如果在系统中引入MQ,即订单系统将消息先发送到MQ中,MQ再
转发到其他系统,则会解决以下问题:
- 由于订单系统只发消息给MQ,不直接对接其他系统,如果库存系统出现故障,不影响整个订单。
- 如果需求修改,新增了一个X系统,此时无需修改订单系统的代码,只需修改MQ将消息发送给X系
统即可。
异步提速
如果订单系统同步访问每个系统,则用户下单等待时长如下:
如果引入MQ,则用户下单等待时长如下:
削峰填谷
假设我们的系统每秒只能承载1000请求,如果请求瞬间增多到每秒
5000,则会造成系统崩溃。此时引入mq即可解决该问题
使用了MQ之后,限制消费消息的速度为1000,这样一来,高峰期
产生的数据势必会被积压在MQ中,高峰就被“削”掉了,但是因为消
息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持
在1000,直到消费完积压的消息,这就叫做**“填谷”**。
三. MQ的劣势
系统可用性降低
系统引入的外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。
系统复杂度提高
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。
一致性问题
A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败,则会造成数据处理的不一致。
四.MQ应用场景
抢红包、秒杀活动、抢火车票等
这些业务场景都是短时间内需要处理大量请求,如果直接连接系
统处理业务,会耗费大量资源,有可能造成系统瘫痪。
而使用MQ后,可以先让用户将请求发送到MQ中,MQ会先保存
请求消息,不会占用系统资源,且MQ会进行消息排序,先请求
的秒杀成功,后请求的秒杀失败
消息分发
如电商网站要推送促销信息,该业务耗费时间较多,但对时效性
要求不高,可以使用MQ做消息分发。
数据同步
假如我们需要将数据保存到数据库之外,还需要一段时间将数据
同步到缓存(如Redis)、搜索引擎(如Elasticsearch)中。此
时可以将数据库的数据作为消息发送到MQ中,并同步到缓存、
搜索引擎中
异步处理
在电商系统中,订单完成后,需要及时的通知子系统(进销存系
统发货,用户服务积分,发送短信)进行下一步操作。为了保证
订单系统的高性能,应该直接返回订单结果,之后让MQ通知子
系统做其他非实时的业务操作。这样能保证核心业务的高效及
时。
离线处理
在银行系统中,如果要查询近十年的历史账单,这是非常耗时的
操作。如果发送同步请求,则会花费大量时间等待响应。此时使
用MQ发送异步请求,等到查询出结果后获取结果即可
五. AMQP
RabbitMQ是由Erlang语言编写的基于AMQP的MQ产品。
AMQP
即Advanced Message Queuing Protocol(高级消息队列协议),是
一个网络协议,专门为消息中间件设计。基于此协议的客户端与消
息中间件可传递消息,并不受不同中间件产品,不同开发语言等条
件的限制。2006年AMQP规范发布,类比HTTP。
AMQP工作过程
生产者(Publisher)将消息发布到交换机(Exchange),交换机根据规
则将消息分发给交换机绑定的队列(Queue),队列再将消息投递给
订阅了此队列的消费者
六. RabbitMQ工作原理
Producer
消息的生产者。也是一个向交换机发布消息的客户端应用程序。
Connection
连接。生产者/消费者和RabbitMQ服务器之间建立的TCP连接。
Channel
信道。是TCP里面的虚拟连接。例如:Connection相当于电缆,
Channel相当于独立光纤束,一条TCP连接中可以创建多条信
道,增加连接效率。无论是发布消息、接收消息、订阅队列都是
通过信道完成的。
Broker
消息队列服务器实体。即RabbitMQ服务器
Virtual host
虚拟主机。出于多租户和安全因素设计的,把AMQP的基本组件
划分到一个虚拟的分组中。每个vhost本质上就是一个mini版的
RabbitMQ服务器,拥有自己的队列、交换机、绑定和权限机
制。当多个不同的用户使用同一个RabbitMQ服务器时,可以划
分出多个虚拟主机。RabbitMQ默认的虚拟主机路径是 /
Exchange
交换机。用来接收生产者发送的消息,并根据分发规则,将这些
消息分发给服务器中的队列中。不同的交换机有不同的分发规
则。
Queue
消息队列。用来保存消息直到发送给消费者。它是消息的容器,
也是消息的终点。消息一直在队列里面,等待消费者链接到这个
队列将其取走。
Binding
消息队列和交换机之间的虚拟连接,绑定中包含路由规则,绑定
信息保存到交换机的路由表中,作为消息的分发依据。
Consumer
消息的消费者。表示一个从消息队列中取得消息的客户端应用程
序
RabbitMQ为什么使用信道而不直接使用TCP连接通信?
TCP连接的创建和销毁开销特别大。创建需要3次握手,销毁需
要4次分手。高峰时每秒成千上万条TCP连接的创建会造成资源
巨大的浪费。而且操作系统每秒处理TCP连接数也是有限制的,
会造成性能瓶颈。而如果一条线程使用一条信道,一条TCP链接
可以容纳无限的信道,即使每秒成千上万的请求也不会成为性
能的瓶颈
七.RabbitMQ的安装
RabbitMQ是使用Erlang语言编写的,所以在安装RabbitMQ前需要
先安装Erlang环境
- 安装Erlang所需的依赖
yum install -y epel-release
- 添加存储条目
wget https://packages.erlangsolutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
- 安装Erlang
yum install erlang-24.2.1
- 查看Erlang是否安装成功
erl -version
- 为了外部能够正常访问RabbitMQ服务,先关闭防火墙
关闭运行的防火墙
systemctl stop firewalld.service
禁止防火墙自启动
systemctl disable firewalld.service
- RabbitMQ是通过主机名进行访问的,必须给服务器添加主机名
#修改文件
vim /etc/sysconfig/network
#添加如下内容
NETWORKING=yes
HOSTNAME=itbaizhan
#修改文件
vim /etc/hosts
#添加如下内容
服务器ip itbaizhan
- 使用rz命令上传RabbitMQ压缩文件
- 安装RabbitMQ
#解压RabbitMQ
tar xf rabbitmq-server-generic-unix-
3.9.13.tar.xz
#重命名:
mv rabbitmq_server-3.9.13 rabbitmq
#移动文件夹:
mv rabbitmq /usr/local/
- 配置环境变量
#编辑/etc/profile文件
vim /etc/profile
#添加如下内容
export PATH=$PATH:/usr/local/rabbitmq/sbin
#运行文件,让修改内容生效
source /etc/profile
- 开启管控台插件
rabbitmq-plugins enable
rabbitmq_management
- 后台运行
#启动rabbitmq
rabbitmq-server -detached
#停止rabbitmq
rabbitmqctl stop
-
通过管控台访问RabbitMQ
路径:http://ip地址:15672 ,用户名: guest ,密码: guest -
此时会提示guest账户只允许本地使用,我们可以配置允许使用
guest远程访问
#创建配置文件夹
mkdir -p /usr/local/rabbitmq/etc/rabbitmq
#创建配置文件
vim
/usr/local/rabbitmq/etc/rabbitmq/rabbitmq.
conf
#添加如下内容
loopback_users=none
#重启RabbitMQ
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
账户管理
guest账户默认只允许本地使用,我们可以创建新账户远程访问
RabbitMQ
- 创建账户
#创建账户
rabbitmqctl add_user 用户名 密码
- 给用户授予管理员角色
rabbitmqctl set_user_tags 用户名
administrator
- 给用户授权
#“/“表示虚拟机
#jjy表示用户名
#”." ".” “." 表示完整权限
rabbitmqctl set_permissions -p “/” jjy ".” “." ".”
八.Docker安装RabbitMQ
- 关闭RabbitMQ服务
rabbitmqctl stop
- 在Centos7中安装docker
#安装Docker
curl -fsSL https://get.docker.com | bash -
s docker --mirror Aliyun
#启动docker
systemctl start docker
- 拉取镜像
docker pull rabbitmq
- 启动RabbitMQ容器
docker run -d --hostname jjy --name
rabbit -p 15672:15672 -p 5672:5672
rabbitmq
- 开启管控台插件
#查询rabbitmq容器ID
docker ps
#进入容器
docker exec -it 容器ID /bin/bash
#开启管控台插件
rabbitmq-plugins enable
rabbitmq_management
#退出容器
ctrl+p+q
-
通过管控台访问rabbitmq
路径: http://ip地址:15672 ,用户名: guest ,密码: guest -
关闭RabbitMQ容器
docker stop rabbit
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
相关文章:

2.6日学习打卡----初学RabbitMQ(一)
2.6日学习打卡 初识RabbitMQ、 一. MQ 消息队列 MQ全称Message Queue(消息队列),是在消息的传输过程中保 存消息的容器。多用于系统之间的异步通信。 同步通信相当于两个人当面对话,你一言我一语。必须及时回复 异步通信相当于通…...

Rust语言之集合
文章目录 一、元组(tuple)1.元组定义2.元组使用解构索引 3.元组修改非可变元组可变元组类型不一致 二、数组1.数组不可变数组定义可变数组定义数组使用数组修改数组的遍历 2.动态数组-向量(Vector)向量定义向量遍历向量追加向量插…...

有道论文翻译接口,python版和lua版
论文翻译接口python版 import requests import hashlib from urllib.parse import quotedef get_md5(s,is_hexTrue):md5hashlib.md5()md5.update(s.encode())if is_hex:return md5.hexdigest()return md5.digest()def translate(source_url,from_en,tozh-CHS):params {from: f…...

java大数据hadoop2.9.2 Flume安装操作
1、flume安装 (1)解压缩 tar -xzvf apache-flume-1.9.0-bin.tar.gz rm -rf apache-flume-1.9.0-bin.tar.gz mv ./apache-flume-1.9.0-bin/ /usr/local/flume (2)配置 cd /usr/local/flume/conf cp ./flume-env.sh.template…...

环境配置:Ubuntu18.04 ROS Melodic安装
前言 不同版本的Ubuntu与ROS存在对应关系。 ROS作为目前最受欢迎的机器人操作系统,其核心代码采用C编写,并以BSD许可发布。ROS起源于2007年,是由斯坦福大学与机器人技术公司Willow Garage合作的Switchyard项目。2012年,ROS团队从…...

2024.2.7-8 寒假训练记录(21)
文章目录 洛谷P3193 [HNOI2008] GT考试ATC abc339E Smooth SubsequenceATC abc339F Product Equality 洛谷P3193 [HNOI2008] GT考试 题目链接 KMPdp矩阵快速幂 还没有理解得很清楚,主要是对KMP理解还不够深刻 #include <bits/stdc.h>using namespace std;…...

C++ pair 的使用
pair的作用 C 中的 std::pair 是标准模板库 (STL) 提供的一个容器,它能够存储两个不同类型的数据作为一个整体,其中first:访问 pair 的第一个元素。second:访问 pair 的第二个元素。 int main() {pair<string, int> p;//通…...

AAAI 2024 | Adobe提出全新上下文提示学习框架CoPL,高效提升下游性能
论文题目:CoPL: Contextual Prompt Learning for Vision-Language Understanding 论文链接:https://arxiv.org/abs/2307.00910 提示学习(Prompt Learning)在近几年的快速发展,激活了以Transformer为基础的大型语言模型…...

Arcgis使用过程中常见问题解决方法
Arcgis无法连接数据库/数据库连接或创建失败解决方法 最近在使用arcgis过程中出现无法连接数据库或者是无法创建数据库。连接到数据库失败;无法创建新的数据库,权限被拒绝(如下图)。 出现这个原因是你所用的电脑系统文件dao360.…...

office文件转pdf在线预览
一、工具类 package com.sby.utils;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.math.RoundingMode; import java.text.DecimalFormat; import java.util.Locale;import com.aspose.cel…...

设计模式2-对象池模式
对象池模式,Object Pool Pattern,当你的应用程序需要频繁创建和销毁某种资源(比如数据库连接、线程、socket连接等)时,Object Pool 设计模式就变得很有用。它通过预先创建一组对象并将它们保存在池中,以便在…...

Oracle笔记-为表空间新增磁盘(ORA-01691)
如下报错: 原因是Oracle表空间满了,最好是新增一个存储盘。 #查XXX命名空间目前占用了多大的空间 select FILE_NAME,BYTES/1024/1024 from dba_data_files where tablespace_name XXXX #这里的FILE_NAME能查到DBF的存储位置#将对应的datafile设置为30g…...

【专业技术】高效并行分布式深度学习策略,助力模型训练与量化
尊敬的客户,您好!我们是一家专注于提供高效深度学习解决方案的专业团队,为您提供并行分布式策略、高效精调策略、大模型无损量化和高性能推理服务。 我们的服务包括: 并行分布式策略:我们的Trainer封装支持多种并行配…...

力扣-137. 只出现一次的数字 II
文章目录 力扣题目代码 力扣题目 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1:…...

Rust 格式化输出
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、format! 宏二、fmt::Debug三、fmt::Display四、? 操作符 循环打印 前言 Rust学习系列-本文根据教程学习Rust的格式化输出,包括fmt::Debug&…...

c#进程(Process)常用方法
在C#中,Process类提供了一系列用于操作进程的常用方法,以下是其中一些常用的方法: Start():启动一个新的进程。 Process.Start("notepad.exe");Kill():终止进程。 Process.GetProcessesByName("note…...

Vue源码系列讲解——虚拟DOM篇【三】(更新子节点)
1. 前言 在上一篇文章中,我们了解了Vue中的patch过程,即DOM-Diff算法。并且知道了在patch过程中基本会干三件事,分别是:创建节点,删除节点和更新节点。创建节点和删除节点都比较简单,而更新节点因为要处理…...

一个设备内存2M,一个1G大小的文件,这个文件有若干行,输出其中的带有hello的行以及行数
第一种 linux上的awk命令: awk {if($1 "113.111.211.224"){print $0}} temp.log 第二种:PHP程序yield ,和awk这个命令用的时间差不多一样,效率是很高的 $file __DIR__."/temp.log";foreach(readfilecong…...

json模块(高维数据的存储与读取)
json模块是 Python 标准库中的一个模块,用于处理 JSON(JavaScript Object Notation)格式的数据。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。模块提供了在 Python 中进行 JSON 编码&…...

ONLYOFFICE文档8.0新功能浅探
ONLYOFFICE文档8.0新功能浅探 上个月末这个月初的几天,ONLYOFFICE版本更新了!更新到了一个比较整的大的版本号,8.0版本,看来这个生产力工具的升级速度基本上能保持每年两个版本号的速度,还是很快的,一般来…...

在vscode 中配置 pyside6 环境
在vscode中编写pyside环境配置 start 记录一下在 vscode 中编写 pyside6 程序,环境如何配置。 前提 请自行安装好 python。请自行安装好 vscode。安装 vscode 插件 Python,PYQT Integration。 配置环境 1.借助 pip 安装我们的pyside6 pip install…...

C语言:月份缩写
题目描述 从一月份到十二月的英文全称依次是:“January”,“February”,“March”,“April”,“May”,“June”,“July”,“August”,“September”,“October”,“November”,“December” 对应的缩写依次是:“Jan.”,“Feb.”,“Mar.”,“Apr.”,“Ma…...

线阵相机系列-- 1. 什么是线阵相机
线阵相机的概念 根据工业相机像素排列方式的不同,分为面阵相机和线阵相机。面阵相机的像素排列为一个完整的面,一次获取整幅二维图像,而线阵相机的像素以一条线排列,每次得到的图像呈现出一条线,通过设置扫描频率以及…...

CISCRISC? CPU架构有哪些? x86 ARM?
编者按:鉴于笔者水平有限,文中难免有不当之处,还请各位读者海涵。 是为序 我猜,常年混迹CSDN的同学应该不会没听说过CPU吧? 但你真的了解CPU吗?那笔者问你CPU有哪些架构呢? 如果你对你的答案…...

【C语言】(15)指针进阶
1. 指针与const 在C语言中,const关键字和指针一起使用时,可以创建对常量的引用,或者创建指向常量的指针。这对于保护重要数据不被意外修改以及提高程序的可读性和运行时的安全性非常有用。 1.1 const的基本用法 const关键字用于声明一个变…...

力扣精选算法100道—— 连续数组(前缀和专题)
连续数组(前缀和专题) 目录 🚩了解题意 🚩算法原理 ❗为什么hash设置成<0,-1>键值对 ❗与和为K的子数组比较hash的键值对 🚩代码实现 🚩了解题意 我们看到给定数组里面只有0和1,我们…...

flutter 国内源
Flutter 在中国由于网络原因,从官方默认的国外源下载Dart包和Flutter SDK可能会比较慢或者不稳定。为了加速依赖包的获取与Flutter SDK的安装,可以使用国内镜像源。以下是一些国内常用的Flutter和Dart包镜像源: 清华大学开源软件镜像站 Flu…...

第九个知识点:内部对象
Date对象: <script>var date new Date();date.getFullYear();//年date.getMonth();//月date.getDate();//日date.getDay();//星期几date.getHours();//时date.getMinutes();//分date.getSeconds();//秒date.getTime();//获取时间戳,时间戳时全球统一&#x…...

Android 车载应用开发之车载操作系统
一、前言 到 2030 年,全球电动汽车的销量将超过 7000 万辆,保有量将达到 3.8 亿辆,全球年度新车渗透率有望触及 60% 。这一数据来自国际能源署(IEA)发布的《全球电动汽车展望2023》。 市场趋势和政策努力的双加持下,新能源汽车来势凶猛,燃油车保有量逐年递减。此番景象…...

Qt PCL学习(文章链接汇总)
Qt PCL学习(一):环境搭建 Qt PCL学习(二):点云读取与保存 Qt PCL学习(三):点云滤波 Qt PCL学习(四):点云关键点 持续更新中…...