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

朝阳网站制作/全国推广优化网站

朝阳网站制作,全国推广优化网站,如何给网站添加客服,河南网站seo费用本篇文章学习于 bilibili黑马 的视频 (狗头保命) 同步通讯 & 异步通讯 (RabbitMQ 的前置知识) 同步通讯:类似打电话,只有对方接受了你发起的请求,双方才能进行通讯, 同一时刻你只能跟一个人打视频电话。异步通讯:类似发信息&#xff0c…

本篇文章学习于 bilibili黑马 的视频 (狗头保命)

同步通讯 & 异步通讯 (RabbitMQ 的前置知识)

  • 同步通讯:类似打电话,只有对方接受了你发起的请求,双方才能进行通讯, 同一时刻你只能跟一个人打视频电话。
  • 异步通讯:类似发信息,不用对方接受,你就可以直接发信息,而且可以多线操作,同时跟多人发信息。

同步调用
在这里插入图片描述

发送方直接把消息传递给接收者, 如果中间有很多环节, 有一步出错, 那么所有操作都要回滚


同步调用的缺点:

  1. 拓展性差
  2. 性能下降
  3. 级联失败

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

异步调用中, 发送方把消息发送给消息broker, 就算完成发送任务.
接收者从消息 breker 那里订阅消息
这样,发送消息的人和接收消息的人就完全解耦了。

此时, 如果发送方发送消息出错, 不需要全部回滚, 只需要将错误信息重新发布给消息代理
如果接受方接受消息过程出现错误, 那么消息代理重传就好, 发送方还是可以正常进行其他操作


异步调用的优势:

  1. 耦合度更低
  2. 性能更好
  3. 业务拓展性强
  4. 故障隔离,避免级联失败

异步通信的缺点:

  1. 完全依赖于Broker的可靠性、安全性和性能
  2. 架构复杂,后期维护和调试麻烦

消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.
RabbitMQ是基于Erlang语言开发的开源消息通信中间件.


开启 RabbitMQ

打开这个目录(我的电脑是)
C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.7.4\sbin
在这里插入图片描述
双击这个文件

在这里插入图片描述

等待命令框为这个状态

在这里插入图片描述

点击跳转官网地址

RabbitMQ


RabbitMQ对应的架构

黑马的图

  • publisher:生产者,也就是发送消息的一方
  • consumer:消费者,也就是消费消息的一方
  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

简单的收发消息 (exchange & queue)

1. 添加 exchange

在这里插入图片描述

2. 添加 queue

在这里插入图片描述

3. 绑定 exchange 和 queue

点击之前创建的 exchange
在这里插入图片描述

添加绑定信息
在这里插入图片描述

4. 发送消息

输入信息, 点击发送
在这里插入图片描述

5. 查看接受的消息

点击被绑定的队列
在这里插入图片描述

获取消息
在这里插入图片描述


数据隔离

基于不同用户,将管理权限分离。
基于不同的 virtual host ,将每个项目的数据隔离。

创建用户
在这里插入图片描述

此时用户没有 virtral hosts
在这里插入图片描述

退出, 重新登录
在这里插入图片描述

创建 virtual hosts
在这里插入图片描述

此时用户 zrj 已经拥有 virtual hosts 了
在这里插入图片描述

将 virtual hosts 切换到 /zrj 之后, 查看 queue, 会发现之前创建的 test.queue 已经看不见了, 这就是基于 用户和 virtual hosts 的数据隔离效果
在这里插入图片描述

Spring AMQP

RabbitMQ 基于 AMQP 协议, 因此具有跨语言的特性.
Spring 官方基于 RabbitMQ 提供了一套消息收发管理工具 ---- Spring AMQP

Spring AMQP 提供的功能

  • 自动声明队列、交换机及其绑定关系
  • 基于注解的监听器模式,异步接收消息
  • 封装了RabbitTemplate工具,用于发送消息

项目中使用 RabbitMQ

如果你很懒, 不想自己创建, 就去bilibili黑马的课程里, 找资源吧 (毕竟我也是在那里学的)

发送消息

创建项目, 导入依赖

项目目录结构
在这里插入图片描述

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency>
</dependencies>

添加一下配置
在这里插入图片描述

Spring 中发送消息在这里插入图片描述

RabbitMQ 接收到消息
在这里插入图片描述

上面是使用管道简单的发送消息, 结构大概是这样
在这里插入图片描述

我们查看 的 convertAndSend 方法可以看到, 由于多态, 参数的选择有很多方案, 上面使用的是
convertAndSend(String routingKey, Object object)
因为所有的数据发送都是 Object , 因此我们接收方那里收到的, 也是 Object 类型, 如果想取出使用, 记得转换类型
在这里插入图片描述

接收消息

增加配置
在这里插入图片描述

编写监听代码
在这里插入图片描述

启动 consumer 类
在这里插入图片描述

publisher 中进行消息发送, 此时 consumer 中可以接收到消息
在这里插入图片描述

WorkQueues模型

简单的说就是多个消费者消费同一个队列中的消息

在这里插入图片描述

通常情况下, 队列会采用轮询的方式, 每个消费者均分 队列中的消息

两个消费者共同消费同一个队列
在这里插入图片描述

连续发送 50 条消息
在这里插入图片描述

查看结果会发现, 两个消费者虽然消费速率不同, 但是最终都消费了同样数量 (25条) 的消息
在这里插入图片描述

如何才能使得能者多劳, 不会浪费效率呐?

修改配置信息, 设定么个消费者每次获取消息的最大数量 (原先是 几个消费者 平均分掉 所有消息), 消费完成获取的消息之后才能获取下一条消息
在这里插入图片描述

引入交换机之后的 生产者消费者模型

在这里插入图片描述

注意: Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!

交换机的类型:
Fanout:广播,将消息交给所有绑定到交换机的队列。我们最早在控制台使用的正是Fanout交换机
Direct:订阅,基于RoutingKey(路由key)发送给订阅了消息的队列
Topic:通配符订阅,与Direct类似,只不过RoutingKey可以使用通配符
Headers:头匹配,基于MQ的消息头匹配,用的较少。

Fanout 交换机

交换机把消息发送给 所有 绑定该交换机的队列
在这里插入图片描述

创建交换机
在这里插入图片描述

创建两个队列并绑定
在这里插入图片描述
在这里插入图片描述

发送消息, 并接收处理

消息发送方
在这里插入图片描述

消息接收方
在这里插入图片描述

消息处理
在这里插入图片描述

可以看到, Fanout 交换机把消息 广播 给了绑定它的所有队列

Direct 交换机

Direct 模型下, 队列与交换机的绑定会指定一个 RoutingKey(路由key)
消息的发送方在向 Exchange 发送消息时吗也必须指定消息的 RoutingKey
Exchange 会将消息交给具有相同 RoutingKey 的队列

在这里插入图片描述

创建交换机
在这里插入图片描述

创建队列
在这里插入图片描述

将交换机和队列进行绑定 (填写 RoutingKey)
在这里插入图片描述

消息接收
在这里插入图片描述

此时会发现, 对于不同的消息发送, 会有不同的处理

当 RoutingKey 为 red 时, 两个消费者都会进行消息处理
在这里插入图片描述
在这里插入图片描述

当 RoutingKey 为 green / blue 时, 只有绑定对应的 RoutingKey 的消费者都会进行消息处理
在这里插入图片描述
在这里插入图片描述

Tocpic 交换机

和 Direct 交换机基本类似, 但是绑定的 RoutingKey 可以使用通配符

通配符规则:

  • #:匹配一个或多个词
  • *:匹配不多不少恰好1个词

在这里插入图片描述

创建 tocpic 交换机
在这里插入图片描述

创建队列
在这里插入图片描述

将 topic 交换机与 队列 进行路由绑定
在这里插入图片描述

消息发送
在这里插入图片描述

消息接收
在这里插入图片描述

消息处理
在这里插入图片描述

声明队列和交换机

使用 Spring AMQP 提供的 API 来声明队列和交换机, 而不是使用 RabbitMQ 控制台来操作

使用 ExchangeBuilder 来创建队列和交换机
在这里插入图片描述

绑定队列和交换机
在这里插入图片描述

Fanout 实例

写一个类声明交换机和队列
在这里插入图片描述

运行 publisher 后, 可以在控制台看到 队列, 交换机, 绑定 都已完成
在这里插入图片描述
在这里插入图片描述

Direct示例 (Topic 与其几乎完全相同)

写一个类声明交换机和队列
在这里插入图片描述

运行 publisher 后, 可以在控制台看到 队列, 交换机, 绑定 都已完成
在这里插入图片描述

基于注解声明

由于要绑定多个 key 的情况, 基于 @Bean 的方式声明队列和交换机会很麻烦, 因此 Spring AMQP 提供了注解的方式来声明 交换机和队列

Fanout 示例

在消费的同时声明 Fanout 交换机和队列
在这里插入图片描述

运行 publisher 后查看 RabbitMQ 控制台
在这里插入图片描述

Direct示例 (Topic 与其几乎完全相同)

在消费的同时声明 Fanout 交换机和队列
在这里插入图片描述

运行 publisher 后查看 RabbitMQ 控制台
在这里插入图片描述

相关文章:

RabbitMQ-学习笔记(初识 RabbitMQ)

本篇文章学习于 bilibili黑马 的视频 (狗头保命) 同步通讯 & 异步通讯 (RabbitMQ 的前置知识) 同步通讯&#xff1a;类似打电话&#xff0c;只有对方接受了你发起的请求,双方才能进行通讯, 同一时刻你只能跟一个人打视频电话。异步通讯&#xff1a;类似发信息&#xff0c…...

SQL Update语句

SQL Update语句 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; SQL Update语句&#xff1a;数据库操作高招解析 数据库是我们搭建查券返利机器人的重要组成部分&…...

C语言-WIN32API介绍

Windows API 从第一个32位的Windows开始就出现了&#xff0c;就叫做Win32API.它是一个纯C的函数库&#xff0c;就和C标准库一样&#xff0c;使你可以写Windows应用程序过去很多Windows程序是用这个方式做出来的 main()? main()成为C语言的入口函数其实和C语言本身无关&…...

TFIDF、BM25、编辑距离、倒排索引

TFIDF TF刻画了词语t对某篇文档的重要性&#xff0c;IDF刻画了词语t对整个文档集的重要性...

MySQL之DML语句

文章目录 DML语句创建表添加表字段**插入数据**查询数据更新数据替换数据删除数据清除表数据删除表 DML语句 数据操作语言DML&#xff08;Data Manipulation Langua&#xff09; 是SQL语言的一个分类&#xff0c;用于对表的数据进行增&#xff0c;删&#xff0c;改&#xff0c…...

kubernetes集群常用指令

目录 1.1 基础控制指令 1.2 命令实践 1.3 备注 1.1 基础控制指令 # 查看对应资源: 状态 $ kubectl get <SOURCE_NAME> -n <NAMESPACE> -o wide ​ # 查看对应资源: 事件信息 $ kubectl describe <SOURCE_NAME> <SOURCE_NAME_RANDOM_ID> -n <NAMES…...

PyQt6 QTreeView树视图

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili QTreeView类&#xff0c;它是树控件的基类&#xff0c;使用时&#xff0c;必须为其提供一个模型来与之配合。 QTreeView类的常用方法&#xff1a; 方法…...

链表|148. 排序链表

148. 排序链表 题目&#xff1a;给你链表的头结点 head &#xff0c;请将其按升序排列并返回排序后的链表。 题目链接&#xff1a; 148. 排序链表 时间复杂度&#xff1a;快排 O(n^2) 超出时间限制 class Solution {public ListNode sortList(ListNode head) {if(headnull)…...

如何解决5G基站高能耗问题?

安科瑞 须静燕 截至2023年10月&#xff0c;我国5G基站总数达321.5万个&#xff0c;占全国通信基站总数的28.1%。然而&#xff0c;随着5G基站数量的快速增长&#xff0c;基站的能耗问题也逐渐日益凸显&#xff0c;基站的用电给运营商带来了巨大的电费开支压力&#xff0c;降低5…...

PyTorch实现逻辑回归

最终效果 先看下最终效果&#xff1a; 这里用一条直线把二维平面上不同的点分开。 生成随机数据 #创建训练数据 x torch.rand(10,1)*10 #shape(10,1) y 2*x (5 torch.randn(10,1))#构建线性回归参数 w torch.randn((1))#随机初始化w&#xff0c;要用到自动梯度求导 b …...

什么是FPGA原型验证?

EDA工具的使用主要分为设计、验证和制造三大类。验证工作贯穿整个芯片设计流程&#xff0c;可以说芯片的验证阶段占据了整个芯片开发的大部分时间。从芯片需求定义、功能设计开发到物理实现制造&#xff0c;每个环节都需要进行大量的验证。 现如今验证方法也越来越多&#xff…...

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十四:系统设置模块相关功能实现

一、本章内容 本章使用已实现的公共组件实现系统管理中的系统设置模块相关功能,包括菜单管理、角色管理、日志管理、用户管理、系统配置、数据字典等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址:...

使用Visual Studio(VS)创建空项目的Win32桌面应用程序【main函数入口变WinMain】

前言 在Visual Studio中直接新建Windows桌面应用程序会有很多多余的代码生成&#xff0c;本文将提供从空项目创建Win32项目的方法&#xff0c;解决新建空项目直接使用WinMain代码编译报错的问题 例如&#xff1a;LNK2019 &#xff1a;无法解析的外部符号 参考博客&#xff1…...

基于自动化脚本批量上传依赖到nexus内网私服

前言 因为某些原因某些企业希望私服是不能连接外网的&#xff0c;所以需要某些开源依赖需要我们手动导入到nexus中&#xff0c;尽管nexus为我们提供了web页面。但是一个个手动导入显然是一个庞大的工程。 对此我们就不妨基于脚本的方式实现这一过程。 预期效果 笔者本地仓库…...

Linux中ps命令使用指南

目录 1 前言2 ps命令的含义和作用3 ps命令的基本使用4 常用选项参数5 一些常用情景5.1 查看系统中的所有进程&#xff08;标准语法&#xff09;5.2 使用 BSD 语法查看系统中的所有进程5.3 打印进程树5.4 获取线程信息5.5 获取安全信息5.6 查看以 root 用户身份&#xff08;实际…...

PHP开发语言中,网页端常用的标签

在PHP开发语言中&#xff0c;网页端常用的标签包括以下几种&#xff1a; <html>&#xff1a;用于定义整个HTML文档。<head>&#xff1a;用于定义文档的头部&#xff0c;包含元数据、样式表和脚本等。<title>&#xff1a;用于定义文档的标题&#xff0c;显示…...

Java 入门第四篇 集合

Java 入门第四篇 集合 一&#xff0c;什么是集合 在Java中&#xff0c;集合&#xff08;Collection&#xff09;是一种用于存储和操作一组对象的容器类。它提供了一系列的方法和功能&#xff0c;用于方便地管理和操作对象的集合。集合框架是Java中非常重要和常用的一部分&…...

VBA技术资料MF93:将多个Excel表插入PowerPoint不同位置

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

STM32 MCU的易坑点收集

IIC配置中的Clock No Stretch Mode Clock Stretch Mode时钟延长模式&#xff1a; 时钟延长是一个术语&#xff0c;某些从设备可以把时钟线拉低&#xff0c;主设备发现自己释放时钟线之后时钟线还没有变成高电平&#xff0c;就会停止发送数据&#xff0c;然后等待从设备释放时钟…...

Vue3项目filter.js组件封装

1、element-plus(el-table)修改table的行样式 export function elTableRowClassName({ row, rowIndex }) {if (rowIndex % 2 ! 0) {return default-row} }2、时间戳转换格式 export function parseTimeFilter(dateTime, dateType) {if (dateTime || dateTime undefined ||…...

Linux: pwd命令查看当前工作目录

pwd 是 Linux 和其他类 Unix 操作系统中的一个命令&#xff0c;用于显示当前工作目录的绝对路径。 语法 pwd 描述 pwd 是 "print working directory" 的缩写&#xff0c;它用于打印当前工作目录的完整路径。这对于确定当前目录位置非常有用&#xff0c;特别是在嵌…...

【深度学习】PHP操作mysql数据库总结

一.PHP数据库的扩展分类 1.MySQL 扩展是针对 MySQL 4.1.3 或更早版本设计的&#xff0c;是 PHP 与 MySQL数据库交互的早期扩展。由于其不支持 MySQL 数据库服务器的新特性&#xff0c;且安全性差&#xff0c;在项目开发中不建议使用&#xff0c;可用 MySQLi 扩展代替。 2.MySQ…...

【送书活动】探究AIGC、AGI、GPT和人工智能大模型

文章目录 前言01 《ChatGPT 驱动软件开发》推荐语 02 《ChatGPT原理与实战》推荐语 03 《神经网络与深度学习》推荐语 04 《AIGC重塑教育》推荐语 05 《通用人工智能》推荐语 后记赠书活动 前言 人工智能技术在过去几年中发展迅猛&#xff0c;得益于大数据、云计算、深度学习等…...

Apple Find My「查找」认证芯片找哪家,认准伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…...

java.lang.IllegalArgumentException: Could not resolve placeholder XXX‘ in value

问题描述 使用Springcloudalibaba的nacos作为配置中心&#xff0c;服务启动时报错&#xff1a; java.lang.IllegalArgumentException: Could not resolve placeholder XXX‘ in value java.lang.IllegalArgumentException: Param ‘serviceName’ is illegal, serviceName is …...

自动机器学习是什么?概念及应用

自动机器学习 (Auto Machine Learning) 的应用和方法 随着众多企业在大量场景中开始采用机器学习&#xff0c;前后期处理和优化的数据量及规模指数级增长。企业很难雇用充足的人手来完成与高级机器学习模型相关的所有工作&#xff0c;因此机器学习自动化工具是未来人工智能 (A…...

el-date-picker限制选择7天内禁止内框选择

需求&#xff1a;elementPlus时间段选择框需要满足&#xff1a;①最多选7天时间。②不能手动输入。 <el-date-picker v-model"timeArrange" focus"timeEditable" :editable"false" type"datetimerange" range-separator"至&qu…...

Navicat 技术指引 | 适用于 GaussDB 分布式的调试器

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…...

人工智能导论习题集(3)

第五章&#xff1a;不确定性推理 题1题2题3题4题5题6题7题8 题1 题2 题3 题4 题5 题6 题7 题8...

2023一起益企广东省中小企业数字化赋能活动(深圳站)成功举办

12月12日&#xff0c;由广东工业和信息化厅指导&#xff0c;广东省中小企业服务中心、深圳市中小企业服务局主办&#xff0c;深圳联通承办的2023年“一起益企”广东省中小企业数字化赋能专项对接志愿服务活动&#xff08;深圳站&#xff09;在深圳成功举办。 本次活动涵盖中小企…...