SpringCloud(二)Docker、Spring AMQP、ElasticSearch

news2024/11/19 4:23:00

文章目录

  • 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.coloradmin.cn/o/1062635.html

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

相关文章

创建django文件

1、在指定目录里打开终端,输入D:\Softwares\Anaconda3\envs\pytorch\Scripts\django-admin .exe startproject 名称 ,即可在对应目录里创建django文件。

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么?HTTP & HTTPS 2、HTTP,用户后续的操作,服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器?4、hashmap是线…

目标检测算法改进系列之Backbone替换为PoolFormer

PoolFormer MetaFormer是颜水成大佬的一篇Transformer的论文,该篇论文的贡献主要有两点:第一、将Transformer抽象为一个通用架构的MetaFormer,并通过经验证明MetaFormer架构在Transformer/ mlp类模型取得了极大的成功。 第二、通过仅采用简单…

2019强网杯随便注bugktu sql注入

一.2019强网杯随便注入 过滤了一些函数,联合查询,报错,布尔,时间等都不能用了,尝试堆叠注入 1.通过判断是单引号闭合 ?inject1-- 2.尝试堆叠查询数据库 ?inject1;show databases;-- 3.查询数据表 ?inject1;show …

六、互联网技术——数据存储

文章目录 一、存储系统层次结构二、按照重要性分类三、磁盘阵列RAID三、RAID基础四、磁盘阵列分级五、数据备份与恢复六、容灾与灾难恢复 一、存储系统层次结构 常见的三层存储体系结构如下图所示,分为高速缓冲存储器、主存储器和外存储器。 二、按照重要性分类 …

项目进展(八)-编写代码,驱动ADS1285

一、代码 根据芯片的数据手册编写部分驱动,首先看部分引脚的波形: DRDY: CS: 首先在代码初始化时连续写入三个寄存器: void WriteReg(uint8_t startAddr, uint8_t *regData, uint8_t number) {uint8_t i0;// 循环写number1次…

WVP-28181协议视频平台搭建教程

28181协议视频平台搭建教程 安装mysql安装redis安装ZLMediaKit安装28181协议视频平台安装依赖下载源码编译静态页面打包项目, 生成可执行jar修改配置文件启动WVP 项目地址: https://github.com/648540858/wvp-GB28181-pro 说明: wvp-GB28181-pro 依赖redis和mysql中…

前端 富文本编辑器原理——从javascript、html、css开始入门

文章目录 ⭐前言⭐html的contenteditable属性💖 输入的光标位置(浏览器获取selection)⭐使用Selection.toString () 返回指定的文本⭐getRangeAt 获取指定索引范围 💖 修改光标位置💖 设置选取range ⭐总结⭐结束 ⭐前…

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

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

Linux——指令初识

Linux下基本指令 前言一、 ls 指令二、 pwd命令三、cd 指令四、 touch指令五、mkdir指令六、rmdir指令 && rm 指令七、man指令八、cp指令九、mv指令十、cat指令十一、.more指令十二、less指令十三、head指令十四、tail指令总结 前言 linux的学习开始啦! 今…

MyBatisPlus(十二)排序查询:orderBy

说明 排序查询&#xff0c;对应SQL语句中的 orderBy 语句&#xff0c;对查询结果按照指定字段排序。 升序&#xff1a;orderByAsc /*** 查询用户列表&#xff0c; 查询条件&#xff1a;按照 年龄 升序排列*/Testvoid orderByAsc() {LambdaQueryWrapper<User> wrapper …

OpenCV实现人脸检测(Haar特征)

学习目标 原理 实现 import cv2 as cv print(cv.__file__) 路径&#xff1a;E:\Anaconda3\envs\test_py3.6\Lib\site-packages\cv2\data 代码实现 import cv2 as cv import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei] #1&#x…

小程序中如何开启分销

小程序共享微信生态&#xff0c;商家可以通过小程序来快速扩大自己的销售渠道&#xff0c;其中一个非常受重要的功能就是分销。通过开启分销功能&#xff0c;商家可以让更多的人参与到销售中来&#xff0c;从而提高销售额。那么&#xff0c;在小程序中如何开启设置分销呢&#…

【Blender实景合成】会跳舞的神里绫华

效果预览 本文将介绍Blender用于实景合成的工作流程。 先看效果&#xff1a; 神里绫华爬上了我的办公桌 模型和动作资源准备 角色模型 本次主要使用的是原神游戏中&#xff0c;神里绫华的角色模型&#xff0c;该模型米哈游在模之屋网站上进行开源。 下载地址&#xff1a;ht…

不同数据类型在单片机内存中占多少字节?

文章目录 前言一、不同编译器二、C51* 指针型 三、sizeof结构体联合体 前言 在C语言中&#xff0c;数据类型指的是用于声明不同类型的变量或者函数的一个广泛的系统。变量的类型决定了变量存储占用的空间 一、不同编译器 类型16位编译器大小32位编译器大小64位编译器大小char…

1801_codesys产品主样本了解

全部学习汇总&#xff1a; GreyZhang/g_codesys: some codesys learning notes (github.com) 有些技术、学术的成长&#xff0c;氛围也是很重要的。我觉得工业控制&#xff0c;德国做得算是世界上很突出的。而这个巴伐利亚&#xff0c;更是突出中的佼佼者了。从这里的介绍看&am…

React核心原理与实际开发

学习目标 React是啥&#xff1f; 官方定义&#xff1a;将前端请求获取到的数据渲染为HTML视图的JavaScript库。 一、React入门 1、React项目创建 直接创建react&#xff0c;使用初始化会创建package.json npm init -y再安装 2、React基本使用 使用纯JS创建ReactDOM&#…

C语言数据结构2 1.2 算法

算法的基本概念 算法的定义 算法是对特定问题求解步骤的一种描述&#xff0c;它是指定的有限序列&#xff0c;其中的每条指令表示一个或多个操作。 例、 算法的特性 &#xff08;5个&#xff09; 1.有穷性 一个算法总在执行有穷步之后结束&#xff0c;且每一步都可以在有穷…

医疗器械标准目录汇编2022版共178页(文中附下载链接!)

为便于更好地应用医疗器械标准&#xff0c;国家药监局医疗器械标准管理中心组织对现行1851项医疗器械国家和行业标准按技术领域&#xff0c;编排形成《医疗器械标准目录汇编&#xff08;2022版&#xff09;》 该目录汇编分为通用技术领域和专业技术领域两大类&#xff0c;通用…

计算机网络 第三章数据链路层

文章目录 1、数据链路层概述 1、数据链路层概述