SpringCloud(二)Docker、Spring AMQP、ElasticSearch

文章目录

  • Docker
    • Docker与虚拟机
    • Docker架构
      • 镜像、容器、镜像托管平台
      • Docker架构
      • Docker实践
  • Spring AMQP
    • 简单使用案例
    • 工作队列- WorkQueue
    • 发布订阅服务
      • FanoutExchange
      • DirectExchange
      • TopicExchange
    • 消息转换器
  • ElasticSearch
    • 倒排索引
    • IK分词器
      • IK分词拓展与停用字典
    • 操作索引库
      • mapping映射属性
      • 创建索引库
      • 查询、删除、修改索引库
    • 文档操作
      • 新增、查询、删除文档
      • 修改文档
    • RestClient
      • 使用案例
      • 操作文档案例
    • DSL查询文档

Docker

Docker是一个快速交付应用、运用应用的技术:
1、Docker可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意的Linux操作系统。
2、运用时利用沙箱机制形成隔离容器,各个容器之间互不干扰。
3、启动、移除都可以通过一行命令完成,方便快捷。

Docker要解决的问题:
没有Docker时:
在这里插入图片描述

有Docker时:
在这里插入图片描述
Docker怎么解决不同Linux操作系统的问题呢?
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述

Docker与虚拟机

  • Docker是将应用程序所依赖的环境库函数、包含操作系统的库函数都打包为一个容器。
  • 虚拟机则是通过Hypervisor技术来模拟硬件系统,使得上层应用感觉运行在一个新的操作系统中。
  • Docker的性能接近原生,硬盘占用一般为MB级,启动时间为秒级,而虚拟机性能则较差,硬盘占用一般为GB,启动时间为分钟级。
  • Docker是一个系统进程;而虚拟机是运行在操作系统中的操作系统。
  • Docker体积小,启动速度快,性能好,虚拟机体积大,启动速度慢,性能一般。

在这里插入图片描述

Docker架构

镜像、容器、镜像托管平台

镜像: Docker将应用程序及其所需要的依赖、环境、配置等文件打包在一起,称为镜像。
**容器:**镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
DockerHub:DockerHub是一个Docker镜像的托管平台,这样的平台称为Docker Register。国内也有类似于DockerHub的公开服务,比如阿里云镜像库等。

Docker架构

在这里插入图片描述

在这里插入图片描述

Docker实践

Spring AMQP

  • AMQP(Advanced Message Queuing Protocol)用于在应用程序之间传递业务消息的开放标准,该协议与语言和平台无关,是一种标准。
  • Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息,包含了两部分内容:
    • spring-amqp是基础抽象
    • spring-rabbit是底层的默认实现

简单使用案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工作队列- WorkQueue

在这里插入图片描述

在这里插入图片描述

消息发布者:约每秒发送50条消息

消息接收者:消费者1每秒消费50条,消费者2每秒消费5条。
在这里插入图片描述
结果:
消费者1消费偶数序号的消息,很快就处理完毕,约1秒。

在这里插入图片描述
消费者2消费奇数序号的消息,耗时约5秒才完成。
在这里插入图片描述

消息被平均的分配给了两个消费者,没有考虑消费者的具体消费能力。这是消息队列默认的消息预取机制导致的结果,消费者1和2都预取了25条消息。

通过修改配置文件,更改消息预取配置,预取数设置为1.
在这里插入图片描述
结果:
消费者1消费了大量的消息,能者多劳,在约1秒内,消费掉了所有的消息。

在这里插入图片描述
在这里插入图片描述

发布订阅服务

发布订阅模式与之前的案例区别就是允许将同一个消息发送给多个消费者,实现方式就是加入了exchange(交换机)。
在这里插入图片描述

FanoutExchange

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
交换机绑定完毕后,可以在rabbit mq的前台看到绑定关系:
在这里插入图片描述

消费者:
在这里插入图片描述
发送者向交换机发送消息:
在这里插入图片描述

DirectExchange

DirectExchange通过bindingKey比对,决定是否想队列发送消息。

如果多个队列绑定了相同的key,那么DirectExchange是可以模拟出FanOutExchange的效果的。
在这里插入图片描述

在本次案例中,我们在注解@RabbitListener中声明Exchange、Queue、RoutingKey,因为每次通过@Bean的形式声明绑定关系会比较繁琐。

在这里插入图片描述
直接在消费者端@RabbitListener中声明队列、交换机和绑定关系:
在这里插入图片描述
启动后,在Rabbit前台可以看到交换机和队列均已生成:

在这里插入图片描述
在这里插入图片描述

TopicExchange

TopicExchange与DirectExchange最大的区别在于,Topic 是基于话题匹配,可以使用通配符,匹配BindingKey。
在这里插入图片描述
在这里插入图片描述
TopicExchange与DirectExchange声明的方式基本是一致的:
在这里插入图片描述

消息转换器

在使用SpringAMQP时,发送消息的参数类型为Object,因此可以发送任意类型的消息,但是SpringAMQP默认使用的是JDK自带的序列化方式,序列化效率低。
在这里插入图片描述
使用json序列化之后:
发送一个Map对象:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ElasticSearch

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

倒排索引

什么是文档和词条?

  • 每一条数据就是一个文档
  • 对文档中的内容进行分词,得到的词语就是词条。

什么是正向索引和倒排索引?

  • 基于文档id创建索引,查询词条时必须先找到文档,而后判断是否包含词条。
  • 对文档内容分词,对词条创建索引,并记录词条所在的文档的信息,查询时先根据词条查询到文档id,而后获取到文档。

在这里插入图片描述
在这里插入图片描述

IK分词器

在这里插入图片描述

IK分词拓展与停用字典

IK分词器基于自有的字典进行分词,然后网络热门词汇都是实时更新的,还有些时候,需要对敏感词进行过滤,这时就需要用到IK分词器的拓展和停用字典。

例如下边的例子中,“白嫖”、“奥利给”等新兴词汇没有被收录IK分词器的词典,因此没有成功被分词。

在这里插入图片描述

在这里插入图片描述

在ElasticSearch的配置文件中设置拓展字典路径:
在这里插入图片描述
在ext.dir添加:
在这里插入图片描述
在stopword.dir添加:
在这里插入图片描述

操作索引库

mapping映射属性

  • mapping映射对文档进行约束,比如字符串类型,分为text(可分词的文本)和keyword(精确值,包含国家名、品牌名、ip等)。

  • mapping映射属性虽然没有数组类型,但是每个类型的字段都允许对应多个值,视为该类型的数组。

  • index:默认为true,即为每个属性字段都添加倒排索引,实际上有些字段是无需索引的,比如ip,那么就可以将其设置为false。

在这里插入图片描述

创建索引库

PUT
在这里插入图片描述

查询、删除、修改索引库

在这里插入图片描述

在这里插入图片描述

文档操作

新增、查询、删除文档

在这里插入图片描述

修改文档

在这里插入图片描述
在这里插入图片描述

RestClient

在这里插入图片描述

使用案例

步骤一导入数据模型:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将Client作为成员变量,使用@BeforeEach,给Client成员赋值,主要就是连接上ES的服务器ip。

使用@AfterEach,在结束时释放掉Client。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

操作文档案例

文档操作的基本步骤:

  1. 初始化RestHighLevelClient
  2. 创建XxxRequest,XXX是index(新建文档)、Get(查询)、Update(更新)、Delete(删除)
  3. 准备参数(Index和Update时需要)
  4. 发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete。

在这里插入图片描述
从数据库查询一条酒店信息,并新增文档到ES:
在这里插入图片描述
根据id查询文档:
在这里插入图片描述
根据id修改酒店数据:

在这里插入图片描述
根据id删除文档:
在这里插入图片描述
批量导入酒店数据到ES:
在这里插入图片描述
在这里插入图片描述

DSL查询文档

DSL(Domain Specific Language),一种特定领域的查询语言,用于构建复杂的查询和聚合操作。

在Elasticsearch中,可用DSL语法来定义查询和过滤条件,以及执行聚合操作。
DSL语法具有JSON格式(敲重点,要考),因此它非常易于阅读和编写。

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

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

相关文章

c#基础逻辑练习案例

第二章综合练习小游戏 练习内容 向控制台输出“这是学号姓名的C#基础小游戏”。向控制台换行再输出“请输入你的游戏昵称:”。向控制台输入你的游戏昵称,赋给一个字符串变量。向控制台换行再输出“请输入你的性别:”。向控制台输入你的性别…

创建vue3工程

一、新建工程目录E:\vue\projectCode\npm-demo用Visual Studio Code 打开目录 二、点击新建文件夹按钮,新建vue3-01-core文件夹 三、右键vue3-01-core文件夹点击在集成终端中打开 四、初始化项目,输入npm init 一直敲回车直到创建成功如下图 npm init 五…

Spring5应用之Cglib动态代理

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 前言Cglib动态代理…

uCOSIII实时操作系统 二 同步与通信

目录 同步概念: 互斥概念: 临界区概念: 任务时间概念: 信号量概念: 互斥信号量概念: 事件标志组概念: 消息邮箱和消息梯队概念: 内存管理概念: 如何从裸机开发…

矢量图形编辑软件illustrator 2023 mac特点介绍

illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软件&am…

六、vpp 流表+负载均衡

草稿!!! vpp node其实就是三个部分 1、plugin init 2、set command 3、function 实现功能,比如这里的流表 今天我们再用VPP实现一个流表的功能 一、流表 1.1流表----plugin init VLIB_REGISTER_NODE 注册流表节点 // 注册流…

纯css实现3D鼠标跟随倾斜

老规矩先上图 为什么今天会想起来整这个呢?这是因为和我朋友吵架, 就是关于这个效果的,就是这个 卡片懸停毛玻璃效果, 我朋友认为纯css也能写, 我则坦言他就是在放狗屁,这种跟随鼠标的3D效果要怎么可能能用纯css写, 然后吵着吵着发现,欸,好像真能用css写哦,我以前还写过这种…

去雨去雪去雾数据集构建

在进行去雨去雪去雾算法的学习过程中,需要构建去雨去雪去雾数据集,本文参考Learning Multiple Adverse Weather Removal via Two-stage Knowledge Learning and Multi-contrastive Regularization: Toward a Unified Model论文中的数据集设定&#xff0c…

面试题 17.24. 最大子矩阵

链接: 面试题 17.24. 最大子矩阵 题解: 这样我们就将二维问题转化为了一维问题,现在另一个问题就是怎么把所有情况都遍历到呢? 我们以第i行为第一行,向下延申,设最后一行为第j行,我们就i在这么…

【AI视野·今日NLP 自然语言处理论文速览 第四十七期】Wed, 4 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 4 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Contrastive Post-training Large Language Models on Data Curriculum Authors Canwen Xu, Corby Rosset, Luc…

手机或者电脑连接局域网内的虚拟机(网桥)

手机或者电脑连接局域网内的虚拟机(网桥) 手机软件:ConnectBot,Termius,JuiceSSH … 1.虚拟机vmware中添加桥接网卡 这里桥接网卡选择的是自动,是自动生成动态IP,如果不需要动态生成&#xff…

MySQL:数据库的物理备份和恢复-冷备份(3)

介绍 物理备份: 直接复制数据文件进行的备份 优点:不需要其他的工具,直接复制就好,恢复直接复制备份文件即可 缺点:与存储引擎有关,跨平台能力较弱 逻辑备份: 从数据库中导出数据另存而进行的备…

性能测试工具 - LoadRunner

什么是性能测试? 性能测试就是测试人员利用性能测试工具模拟系统在不同情况下的性能指标是否正常。 性能测试工具 - LoadRunner 接下来介绍LoadRunner的作用和使用。 LoadRunner 就是一个很常见的性能测试工具,它有三个部分组成: 这三个组…

【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门

大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

Java实现微信支付

微信支付 小黄最在工作中对接需要对接微信支付,在此记录一下微信支付开发的相关流程,望能帮助到各位 前期准备 由于小黄是小程序端需要对接微信支付,需要注册小程序等,小黄会一一列举出来 小程序注册 所需文件 没有注册过微信…

私有云盘:lamp部署nextcloud+高可用集群

目录 一、实验准备: 二、配置mariadb主从复制 三台主机下载mariadb 1)主的操作 2)从的操作 3)测试数据是否同步 三、配置nfs让web服务挂载 1、安装 2、配置nfs服务器 3、配置web服务的httpd 4、测试 四、web 服务器 配…

排序篇(三)----交换排序

排序篇(三)----交换排序 1.冒泡排序 基本思想: ​ 通过不断地比较相邻的元素,将较大的元素往后移动,从而实现排序的目的。 具体的步骤如下: 从待排序的数组中选择相邻的两个元素进行比较,如果前一个元素大于后一个元素&#…

ParagonNTFSforMac_15.5.102中文版最受欢迎的NTFS硬盘格式读取工具

Paragon NTFS for Mac是一款可以为您轻松解决Mac平台上不能识别Windows通用的NTFS文件难题,这是一款强大的Mac读写工具,相信在很多时候,Mac用户需要对NTFS文件的移动硬盘进行写入,但是macOS系统默认是不让写入的,使用小…

Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因

文章目录 前言502和504区别---都是Nginx返回的access.log和error.log介绍SpringBoot结合Nginx实战502 and 504准备工作Nginx配置host配置SpringBoot 502模拟access.logerror.log 504模拟access.logerror.log 500模拟access.logerror.log 总结 前言 刚工作那会,最常…

Jmeter基础篇

1.性能测试指标 【虚拟用户数】:线程用户 【并发数】:指在某一时间,一定数量的虚拟用户同时对系统的某个功能进行交互,一般通过集合点实现 【事务】:事务代表一个完整的功能,一个接口可以是事务,多个接口…