
微服务架构
文章平均质量分 63
动 力 小 子
笔记随便写的,一般都是给自己看的,各位能看的懂的话可以当作参考。
展开
-
43-RestClient查询文档
3.RestClient查询文档文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括:1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应3.1.快速入门我们以match_all查询为例3.1.1.发起查询请求代码解读: 第一步,创建SearchRequest对象,指定索引库名 第二步,利用request.source()构建DSL,DSL中可以包含查询、分页、排序、高亮等 query():代.转载 2021-11-23 17:58:56 · 714 阅读 · 0 评论 -
42-搜索结果处理
2.搜索结果处理搜索的结果可以按照用户指定的方式去处理或展示。2.1.排序elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。2.1.1.普通字段排序keyword、数值、日期类型排序的语法基本一致。语法:GET/indexName/_search{"query":{"match_all":{}},"sort":...转载 2021-11-23 17:56:58 · 331 阅读 · 0 评论 -
41-DSL查询文档
1.DSL查询文档elasticsearch的查询依然是基于JSON风格的DSL来实现的。1.1.DSL查询分类Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query转载 2021-11-23 17:53:46 · 270 阅读 · 0 评论 -
40-RestClient操作文档
5.RestClient操作文档为了与索引库操作分离,我们再次参加一个测试类,做两件事情:初始化RestHighLevelClient 我们的酒店数据在数据库,需要利用IHotelService去查询,所以注入这个接口package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel;import cn.itcast.hotel.service.IHotelService;import org.junit.jupiter.api.Afte转载 2021-11-23 17:48:08 · 425 阅读 · 0 评论 -
39-RestAPI
4.RestAPIES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:Elasticsearch Clients | Elastic其中的Java Rest Client又包括两种:Java Low Level Rest Client Java High Level Rest Client我们学习的是Java HighLevel Rest Client客户端API4.0.导入Demo工程4..转载 2021-11-23 17:42:51 · 152 阅读 · 0 评论 -
38-Elasticsearcher文档操作
3.文档操作3.1.新增文档语法:POST/索引库名/_doc/文档id{"字段1":"值1","字段2":"值2","字段3":{"子属性1":"值3","子属性2":"值4"}, // ...}示例:POST/heima/_doc/1{"info":"黑马程序员Java讲师","email":"zy@itcast.cn","name":{...转载 2021-11-18 17:20:29 · 126 阅读 · 0 评论 -
37-Elasticsearch索引库操作
2.索引库操作索引库就类似数据库表,mapping映射就类似表的结构。我们要向es中存储数据,必须先创建“库”和“表”。2.1.mapping映射属性mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的简单类型有: 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址) 数值:long、integer、short、byte、double、float、 布尔:boolean 日期:date转载 2021-11-18 17:18:55 · 613 阅读 · 0 评论 -
35-Elasticsearch倒排索引和一些概念
1.2.倒排索引倒排索引的概念是基于MySQL这样的正向索引而言的。1.2.1.正向索引那么什么是正向索引呢?例如给下表(tb_goods)中的id创建索引:如果是根据id查询,那么直接走索引,查询速度非常快。但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:1)用户搜索数据,条件是title符合"%手机%"2)逐行获取数据,比如id为1的数据3)判断数据中的title是否符合用户搜索条件4)如果符合则放入结果集,不符合则丢弃。回到步骤1.转载 2021-11-18 17:13:33 · 118 阅读 · 0 评论 -
34-Elasticsearch
1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容例如: 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 1.1.2.ELK技术栈elasticsearch结合kibana、Logstash、Beats,也就是elas转载 2021-11-18 17:11:04 · 136 阅读 · 0 评论 -
33-发布/订阅三个模型
发布/订阅发布订阅的模型如图:可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化: Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机) Exchange:交换机,图中的X。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有以下3种类型: Fanout:广播,将消息交给所有绑定到交.转载 2021-11-18 15:01:56 · 1093 阅读 · 0 评论 -
32-WorkQueue
WorkQueueWork queues,也被称为(Task queues),任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。此时就可以使用work 模型,多个消费者共同处理消息处理,速度就能大大提高了。3.2.1.消息发送这次我们循环发送,模拟大量消息堆积现象。在publisher服务中的SpringAmqpTest类中添加一个测.转载 2021-11-18 14:58:23 · 120 阅读 · 0 评论 -
31-SpringAMQP
SpringAMQPSpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。SpringAmqp的官方地址:Spring AMQPSpringAMQP提供了三个功能:自动声明队列、交换机及其绑定关系 基于注解的监听器模式,异步接收消息 封装了RabbitTemplate工具,用于发送消息3.1.Basic Queue 简单队列模型在父工程mq-demo中引入依赖<!--AM..转载 2021-11-18 14:56:48 · 219 阅读 · 0 评论 -
30-RabbitMQ入门案例
入门案例简单队列模式的模型图:官方的HelloWorld是基于最基础的消息队列模型来实现的,只包括三个角色:publisher:消息发布者,将消息发送到队列queue queue:消息队列,负责接受并缓存消息 consumer:订阅队列,处理队列中的消息2.4.1.publisher实现思路:建立连接 创建Channel 声明队列 发送消息 关闭连接和channel代码实现:package cn.itcast.mq.helloworld;i.转载 2021-11-17 16:03:07 · 153 阅读 · 0 评论 -
29-RabbitMQ快速入门
单机部署我们在Centos7虚拟机中使用Docker来安装。1.1.下载镜像方式一:在线拉取docker pull rabbitmq:3-management方式二:从本地加载在课前资料已经提供了镜像包:上传到虚拟机中后,使用命令加载镜像即可:docker load -i mq.tar1.2.安装MQ执行下面的命令来运行MQ容器:docker run \ -e RABBITMQ_DEFAULT_USER=itcast \ -e .转载 2021-11-17 15:36:35 · 154 阅读 · 0 评论 -
28-Docker镜像仓库
Docker镜像仓库5.1.搭建私有镜像仓库参考课前资料《CentOS7安装Docker.md》5.2.推送、拉取镜像推送镜像到私有镜像服务必须先tag,步骤如下:① 重新tag本地镜像,名称前缀为私有仓库的地址:192.168.150.101:8080/docker tag nginx:latest 192.168.150.101:8080/nginx:1.0 ② 推送镜像docker push 192.168.150.101:8080/nginx:1.0转载 2021-11-17 10:11:41 · 133 阅读 · 0 评论 -
27-Docker-Compose
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!4.1.初识DockerComposeCompose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:version:"3.8" services:mysql:image:mysql:5.7.25 environment: MYSQL_ROOT_PASSWORD: 123 volumes:-...转载 2021-11-17 10:10:23 · 117 阅读 · 0 评论 -
26-Dockerfile自定义镜像
镜像结构镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。我们以MySQL为例,来看看镜像的组成结构:简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。我们要构建镜像,其实就是实现上述打包的过程。3.2.Dockerfile语法构建自定义的镜像时,并不需要一个个文件去拷贝,打包。我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么.转载 2021-11-17 10:08:01 · 157 阅读 · 0 评论 -
25-数据卷
数据卷(容器数据管理)在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。这就是因为容器与数据(容器内文件)耦合带来的后果。要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。2.3.1.什么是数据卷数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/do..转载 2021-11-17 10:06:12 · 659 阅读 · 0 评论 -
24-Docker的容器操作
容器相关命令容器操作的命令如图:容器保护三个状态:运行:进程正常运行 暂停:进程暂停,CPU不再运行,并不释放内存 停止:进程终止,回收进程占用的内存、CPU等资源其中:docker run:创建并运行一个容器,处于运行状态 docker pause:让一个运行的容器暂停 docker unpause:让一个容器从暂停状态恢复运行 docker stop:停止一个运行的容器 docker start:让一个停止的容器再次运行 docker rm:删除一个容器.转载 2021-11-13 14:50:48 · 162 阅读 · 0 评论 -
23-Docker镜像基本命令
镜像操作2.1.1.镜像名称首先来看下镜像的名称组成:镜名称一般分两部分组成:[repository]:[tag]。 在没有指定tag时,默认是latest,代表最新版本的镜像如图:这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。2.1.2.镜像命令常见的镜像操作命令如图:2.1.3.案例1-拉取、查看镜像需求:从DockerHub中拉取一个nginx镜像并查看1)首先去镜..转载 2021-11-13 14:16:24 · 1858 阅读 · 0 评论 -
22-Docker安装
安装DockerDocker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的 安装指南,这里主要介绍 Docker CE 在 CentOS上的安装。1.CentOS安装DockerDocker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足转载 2021-11-13 11:35:33 · 211 阅读 · 0 评论 -
21-跨域问题
什么是跨域问题跨域:域名不一致就是跨域,主要包括:域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com域名相同,端口不同:localhost:8080和localhost8081跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题解决方案:CORS,这个以前应该学习过,这里不再赘述了。不知道的小伙伴可以查看https://www.ruanyifeng.com/blog/20转载 2021-11-13 09:48:48 · 948 阅读 · 0 评论 -
20-统一网关Gateway-全局过滤器
全局过滤器上一节学习的过滤器,网关提供了31种,但每一种过滤器的作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑则没办法实现。3.5.1.全局过滤器作用全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。定义方式是实现GlobalFilter接口。public interface GlobalFilter { /**转载 2021-11-12 16:50:01 · 283 阅读 · 0 评论 -
19-Gateway的过滤器工厂GatewayFilter
过滤器工厂GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:3.4.1.路由过滤器的种类Spring提供了31种不同的路由过滤器工厂。例如:名称说明AddRequestHeader给当前请求添加一个请求头RemoveRequestHeader移除请求中的一个请求头AddResponseHeader给响应结果中添加一个响应头RemoveResponseHeader从响应结果中移除有一个响应头Reque转载 2021-11-12 16:48:48 · 175 阅读 · 0 评论 -
18-Gateway路由断言工厂
断言工厂我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的,像这样的断言工厂在SpringCloudGateway还有十几个:名称说明示例After是某个时间点后的请求- After转载 2021-11-12 16:36:50 · 127 阅读 · 0 评论 -
17-统一网关Gateway
gateway快速入门下面,我们就演示下网关的基本路由功能。基本步骤如下:创建SpringBoot工程gateway,引入网关依赖编写启动类编写基础配置和路由规则启动网关服务进行测试1)创建gateway服务,引入依赖创建服务:引入依赖:<!--网关--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-转载 2021-11-12 16:19:42 · 238 阅读 · 0 评论 -
16-Feign的总结实践
最佳实践所谓最近实践,就是使用过程中总结的经验,最好的一种使用方式。自习观察可以发现,Feign的客户端与服务提供者的controller代码非常相似:feign客户端:UserController:有没有一种办法简化这种重复的代码编写呢?2.4.1.继承方式一样的代码可以通过继承来共享:1)定义一个API接口,利用定义方法,并基于SpringMVC注解做声明。2)Feign客户端和Controller都集成改接口优点:简单实现了代码共享缺点:服务提供方、服务消费方转载 2021-11-12 15:46:58 · 251 阅读 · 0 评论 -
15-Feign的性能优化
Feign使用优化Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:•URLConnection:默认实现,不支持连接池•Apache HttpClient :支持连接池•OKHttp:支持连接池因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。这里我们用Apache的HttpClient来演示。1)引入依赖在order-service的pom文件中引入Apache的HttpClient依赖:<!--httpClient的依赖转载 2021-11-12 14:18:41 · 893 阅读 · 0 评论 -
14-Feign自定义配置
2.2.自定义配置Feign可以支持很多的自定义配置,如下表所示:类型作用说明feign.Logger.Level修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULLfeign.codec.Decoder响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象feign.codec.Encoder请求参数编码将请求参数编码,便于通过http请求发送feign. Contract支持的注解格式默认是转载 2021-11-12 11:51:40 · 774 阅读 · 0 评论 -
13-Feign远程调用
Feign远程调用先来看我们以前利用RestTemplate发起远程调用的代码:存在下面的问题:•代码可读性差,编程体验不统一•参数复杂URL难以维护Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。2.1.Feign替代RestTemplateFegin的使用步骤如下:1)引入依赖我们在order-service服务的pom文件中引入feign的依转载 2021-11-12 11:30:32 · 123 阅读 · 0 评论 -
12-Nacos集群的搭建(转自黑马的笔记)
Nacos集群搭建1.集群结构图官方给出的Nacos集群图:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们计划的集群结构:三个nacos节点的地址:节点ipportnacos1192.168.150.18845nacos2192.168.150.18846nacos3192.168.150.188472.搭建集群搭建集群的基本步骤:搭建数据库,初始化数据库表结构下载nacos转载 2021-11-12 10:36:38 · 141 阅读 · 0 评论 -
11-Nacos多环境配置环境共享
微服务启动时会从nacos读取多个配置文件:[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml [spring.application.name].yaml,例如:userservice.yaml 无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件多种配置的优先级: 服务名-profi.原创 2021-11-11 20:27:11 · 498 阅读 · 0 评论 -
10-Nacos配置管理
统一配置管理配置热更新1.引入Nacos的配置管理客户端依赖 <!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> .原创 2021-11-11 18:46:05 · 107 阅读 · 0 评论 -
09-Nacos的临时实例和非临时实例
设置临时实例 discovery: cluster-name: HZ # 集群名称 namespace: 08ecc5e5-a82a-444a-9e6a-e006353a7ddd #命名空间配置 ephemeral: false #是否是临时实例spring: datasource: url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false username:原创 2021-11-11 16:55:01 · 2505 阅读 · 2 评论 -
08-Nacos环境隔离namespace
控制台新建命名空间为dev命名空间添加服务修改order-service的application.yml,添加namespace namespace: 08ecc5e5-a82a-444a-9e6a-e006353a7ddd #命名空间配置spring: datasource: url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false username: root p...原创 2021-11-11 16:34:07 · 913 阅读 · 0 评论 -
07-Nacos-NacosRule负载均衡
1.设置order-service的集群为HZ2.在order-service中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务userservice: #服务名称 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule3.注意将user-service的权重都设置为1...原创 2021-11-11 16:19:14 · 1351 阅读 · 0 评论 -
06-Nacos服务多级存储模型
服务集群属性1.修改userservice的application.yml,添加如下内容 discovery: cluster-name: HZ # 集群名称spring: datasource: url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false username: root password: 123 driver-class-name: com.mysql.jdb原创 2021-11-11 15:40:39 · 721 阅读 · 0 评论 -
05-Nacos注册中心
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。服务注册到Nacos1.在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖: <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>sp原创 2021-11-11 15:26:50 · 697 阅读 · 0 评论 -
04-饥饿加载
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:ribbon: eager-load: enabled: true # 开启饥饿加载 clients: #指定饥饿加载的服务名称 多个就继续往下写 - userservice...原创 2021-11-11 14:49:29 · 587 阅读 · 0 评论 -
03-Ribbon负载均衡策略
内置负载均衡规则类 规则描述 RoundRobinRule 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。 AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过...原创 2021-11-11 14:42:09 · 82 阅读 · 0 评论