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。
操作文档案例
文档操作的基本步骤:
- 初始化RestHighLevelClient
- 创建XxxRequest,XXX是index(新建文档)、Get(查询)、Update(更新)、Delete(删除)
- 准备参数(Index和Update时需要)
- 发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete。
从数据库查询一条酒店信息,并新增文档到ES:
根据id查询文档:
根据id修改酒店数据:
根据id删除文档:
批量导入酒店数据到ES:
DSL查询文档
DSL(Domain Specific Language),一种特定领域的查询语言,用于构建复杂的查询和聚合操作。
在Elasticsearch中,可用DSL语法来定义查询和过滤条件,以及执行聚合操作。
DSL语法具有JSON格式(敲重点,要考),因此它非常易于阅读和编写。
相关文章:
SpringCloud(二)Docker、Spring AMQP、ElasticSearch
文章目录 DockerDocker与虚拟机Docker架构镜像、容器、镜像托管平台Docker架构Docker实践 Spring AMQP简单使用案例工作队列- WorkQueue发布订阅服务FanoutExchangeDirectExchangeTopicExchange 消息转换器 ElasticSearch倒排索引IK分词器IK分词拓展与停用字典 操作索引库mappi…...
7.Tensors For Beginneers - Convector Components
介绍协向量时,曾说过它们有点像 行向量, 行向量确实以某种方式代表了协向量, 这里说明一下: 协向量是不变的; 协向量组件是可变的。 协向量不依赖坐标系,协向量的组件取决于坐标系。 当我们说协向量具有组…...
直线导轨坏了可以维修吗?
直线导轨是工业自动化设备中常用的零部件,其性能和使用寿命对设备的稳定运行和产能有着直接的影响,在生产中,由于各种原因,直线导轨会出现各种问题,那么,直线导轨的维修方法究竟是怎样的呢?我们…...
Java基础--泛型详解
一、背景 java推出泛型之前,集合元素类型可以是object类型,能够存储任意的数据类型对象,但是在使用过程中,如果不知道集合里面的各个元素的类型,在进行类型转换的时候就很容易引发ClassCastException异常。 二、概念 …...
学习搜狗的workflow,MacBook上如何编译
官网说可以在MacBook上也可以运行,但是编译的时候却有找不到openssl的错误: 看其他博客也有类似的错误,按照类似的思路去解决 问题原因和解决办法 cmake编译的时候,没有找到openssl的头文件,需要设置cmake编译环境下…...
Ubuntu使用cmake和vscode开发自己的项目,引用自己的头文件和openCV
创建文件夹 mkdir my_proj 继续创建include 和 src文件夹,形成如下的目录结构 用vscode打开项目 创建add.h #ifndef ADD_H #define ADD_Hint add(int numA, int numB);#endif add.cpp #include "add.h"int add(int numA, int numB) {return numA nu…...
2) dataset, dataloader
dataset, dataloader torchvision.datasets里面集成了一些常见的数据集,例如MNIST和CIFAR10 1) Dataset 以MNIST为例,其使用方式如下 import torch import torchvision from torchvision import transformstrain_dataset = torchvision.datasets.MNIST(root=../data,trai…...
阿里云PolarDB自研数据库详细介绍_兼容MySQL、PostgreSQL和Oracle语法
阿里云PolarDB数据库是阿里巴巴自研的关系型分布式云原生数据库,PolarDB兼容三种数据库引擎:MySQL、PostgreSQL、Oracle(语法兼容),目前提供云原生数据库PolarDB MySQL版、云原生数据库PolarDB PostgreSQL版和云原生数…...
[软件工具]opencv-svm快速训练助手教程解决opencv C++ SVM模型训练与分类实现任务支持C# python调用
opencv中已经提供了svm算法可以对图像实现多分类,使用svm算法对图像分类的任务多用于场景简单且对时间有要求的场景,因为opencv的svm训练一般只需要很短时间就可以完成训练任务。但是目前网上没有一个工具很好解决训练问题,大部分需要自己编程…...
邮件注册(一)验证码发送
通过邮箱实现注册,用户请求验证码完成注册操作。 导入依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><g…...
【网络安全---sql注入(2)】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。
前言 本篇博客主要是通过piakchu靶场来讲解如何通过SQL注入漏洞来写入文件,读取文件。通过SQL输入来注入木马来getshell等,讲解了比较详细的过程; 如果想要学习SQL注入原理以及如何进行SQL注入,我也写了一篇详细的SQL注入方法及…...
正点原子嵌入式linux驱动开发——TF-A移植
经过了之前的学习,除了TF-A的详细启动流程仍待更新,TF-A的使用和其对应的大致启动流程已经进行过了学习。但是当我们实际做产品时,硬件平台肯定会和ST官方的有区别,比如DDR容量会改变,自己的硬件没有使用到官方EVK开发…...
GB28181学习(六)——实时视音频点播(数据传输部分)
GB28181系列文章: 总述:https://blog.csdn.net/www_dong/article/details/132515446 注册与注销:https://blog.csdn.net/www_dong/article/details/132654525 心跳保活:https://blog.csdn.net/www_dong/article/details/132796…...
JMeter接口自动化测试(数据驱动)
之前我们的用例数据都是配置在HTTP请求中,每次需要增加,修改用例都需要打开JMeter重新编辑,当用例越来越多的时候,用例维护起来就越来越麻烦,有没有好的方法来解决这种情况呢?我们可以将用例的数据存放在cs…...
数据结构:二叉树(超详解析)
目录 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 1.3.1孩子兄弟表示法: 1.3.2双亲表示法:只存储双亲的下标或指针 两节点不在同一树上: 2.二叉树概念及结构 2.1.概念 2.2.特殊的二叉树: 2…...
【考研数学】高等数学第七模块 —— 曲线积分与曲面积分 | 4. 对坐标的曲面积分(第二类曲面积分)与场论初步
文章目录 二、曲面积分2.2 对坐标的曲面积分(第二类曲面积分)1. 问题产生 —— 流量2. 对坐标的曲面积分的定义(了解)3. 对坐标的曲面积分的性质4. 对坐标的曲面积分的计算法(1) 二重积分法(2&a…...
使用Thrift实现跨语言RPC调用
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...
【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】
【QT5-程序控制电源-RS232-SCPI协议-上位机-基础样例【1】】 1、前言2、实验环境3、自我总结1、基础了解仪器控制-熟悉仪器2、连接SCPI协议3、选择控制方式-程控方式-RS2324、代码编写 4、熟悉协议-SCPI协议5、测试实验-测试指令(1)硬件连接(…...
leetcode 1049. 最后一块石头的重量 II、494. 目标和、474. 一和零
1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x < y。那么粉碎的可能结果…...
Error string: Could not load library
启动Rivz时,报错: Error string: Could not load library (Poco exception libg2o_csparse_extension.so.0.1: cannot open shared object file: No such file or directory) [ERROR] [1696572310.529059051]: Failed to load nodelet [/radar_graph_s…...
pom.xml里的标签
pom.xml 是 Maven 项目的配置文件,其中包含了各种配置信息和依赖管理。下面是一些常见的 pom.xml 中的标签和其作用的简要说明: <project>:根标签,定义了整个项目的基本信息和结构。 <groupId>:指定项目所…...
微服务部署的正确策略
微服务部署挑战 单体应用程序的部署意味着您运行单个(通常是大型应用程序)的多个相同副本。这主要是通过配置 N 个服务器(无论是物理服务器还是虚拟服务器)并在每台服务器上运行应用程序的 M 个实例来完成。虽然这看起来非常简单…...
C#中的数组探究与学习
目录 C#中的数组一般分为:一.数组定义:为什么要使用数组?什么是数组?C#一维数组for和foreach的区别C#多维数组C#锯齿数组初始化的意义:适用场景:C#中的数组一般分为: ①.一维数组。 ②.多维数组,也叫矩形数组。 ③.锯齿数组,也叫交错数组。 一.数组定义: 数组…...
计算机网络八股
1、请你说说TCP和UDP的区别 TCP提供面向连接的可靠传输,UDP提供面向无连接的不可靠传输。UDP在很多实时性要求高的场景有很好的表现,而TCP在要求数据准确、对速度没有硬件要求的场景有很好的表现。TCP和UDP都是传输层协议,都是为应用层程序服…...
Waves 14混音特效插件合集mac/win
Waves14是一款音频处理软件,主要用于音频编辑、混音和母带处理。该软件提供了各种插件,包括EQ、压缩、混响、延迟、失真等,以及一些专业的音频处理工具,如L2限幅器、Linear Phase EQ和多频道扬声器管理。 Mac软件下载:…...
Python python-docx 使用教程
openpyxl是Python下的Word库,它能够很容易的对Word文档进行读取 安装方法:pip install python-docx国内镜像安装:pip install -i https://mirrors.aliyun.com/pypi/simple/ python-docx(推荐,安装更快)中文…...
Mac上protobuf环境构建-java
参考文献 getting-started 官网pb java介绍 maven protobuf插件 简单入门1 简单入门2 1. protoc编译器下载安装 https://github.com/protocolbuffers/protobuf/releases?page10 放入.zshrc中配置环境变量 ~/IdeaProjects/test2/ protoc --version libprotoc 3.12.1 …...
CocosCreator3.8研究笔记(二十二)CocosCreator 动画系统-动画剪辑和动画组件介绍
国庆假期,闲着没事,在家研究技术~ 大家都知道在Cocos Creator3.x 的版本的动画编辑器中,可以实现不用写一行代码就能实现各种动态效果。 Cocos Creator动画编辑器中主要实现关键帧动画,不仅支持位移、旋转、缩放、帧动画ÿ…...
信看课堂-厘米GNSS定位
我们常常说GPS 定位,不过定位远不止GPS定位,通过本节课程,我们将会了解到,原来GPS只是定位的一种: GNSS概述 不同的GNSS系统使用不同的频段来传输导航信号。以下是一些主要的GNSS系统及其相应的频段,用表…...
2023CCPC网络赛(A E)
2023CCPC网络赛(A E) The 2nd Universal Cup. Stage 3: Binjiang - Dashboard - Contest - Universal Cup Judging System A. Almost Prefix Concatenation 思路:首先考虑如何求出每个位置允许失配一次的LCP长度 , 可以二分哈希求LCP , 即…...
上海网络做网站公司/武汉搜索引擎排名优化
解决方法: 使用表单提交,而非ajax,即可生效。也可以表单提交时处理事件。 比如,form填写属性onsubmit <form class"ant-form ant-form-horizontal"action"" id"edit-form" method"" …...
自己做网站要买域名吗/地推网
1 BUFFER命中率也就是通常所说高速缓存的命中率,这个指标是指通过内存得到访问的数据和所有访问的数据之间的一个比例。正常指标范围: Buffer命中率正常的指标为:90%-100%,但在数据库繁忙运行期间(批处理应用、数据…...
网站提交地址/app代理推广合作50元
本期主要是围绕 PHP/MySQL/Apache 的加速、优化文章。目录如下:PHP & Memcached (Nio) 使用 memcached 实现对象的自动缓存 (cid73) XCache: 加速你的 PHP (Static) 扩展 PHP (Ben) MySQL 集群技术简介 (叶金荣) LAMP 系统优化实例分析 (Dalamar) Subversion PH…...
动态网页设计网站/中和seo公司
Git支持的协议 首先来看看数据交换需要使用的协议。 Git提供了丰富的协议支持,包括:SSH、GIT、HTTP、HTTPS、FTP、FTPS、RSYNC及前面已经看到的本地协议等。各种不同协议的URL写法如表15-1所示。 协议名称语法格式说明SSH协议(1)s…...
网站上的弹框如何做网页/查询网138网站域名
摘要:知识经济时代,信息科技己逐渐渗透到社会、经济各个领域,并日益成为重要的生产力。而随着信息科技和计算机、互联网及移动通讯的飞跃发展,无线移动网络和智能手机操作系统也发展迅速,在此基础上,以无线互联网和移动终端为基础的即时通讯软件亦如雨后春笋般纷纷涌…...
php网站的登陆注册怎末做的/seo优化培训
本帖最后由 levycui 于 2020-1-16 08:59 编辑问题导读:1、ES的写入基本流程有哪些过程?2、如何理解bulk请求分发?3、bulk写入流程有哪些?4、如何理解协调节点处理并转发请求原理?1 前言Elasticsearch(ES)是一个基于Luc…...