来源出处:
SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from=333.337.search-card.all.click
一、认识微服务
微服务是一种软件架构风格,它将传统的单体应用程序拆分为一系列小型、独立的服务。每个服务都围绕着特定的业务功能构建,并且可以独立地运行、扩展和更新,而不会影响其他服务。这种架构风格为软件开发带来了许多优势和挑战。
微服务的主要优势:
- 可扩展性:由于每个服务都是独立的,因此可以根据需求独立扩展,而无需对整个应用程序进行扩展。
- 灵活性:不同的团队可以使用最适合的技术栈同时开发不同的服务,从而提高了开发效率。
- 弹性:单个微服务的故障不会影响整个应用程序,增强了系统的弹性和可用性。
- 部署和集成:持续集成和部署更容易、更高效,因为可以对单个服务进行更改,而无需重新部署整个应用程序。
- 维护和调试:更小的代码库和关注点分离使维护和调试更易于管理。
二、服务远程调用
通过注册RestTemplate实现服务远程调用
使用示例:
2.1 创建一个配置类来定义 RestTemplate Bean
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; @Configuration
public class AppConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); }
}
2.2 创建一个服务类,使用 @Autowired注解来注入 RestTemplate Bean
package com.example.demo.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; @Service
public class MyRestService { @Autowired private RestTemplate restTemplate; public String callExternalApi(String url) { return restTemplate.getForObject(url, String.class); }
}
这个 MyRestService
类中,我们定义了一个方法 callExternalApi
,它使用 RestTemplate
的 getForObject
方法来发送一个 GET 请求到指定的 URL,并返回响应体作为字符串。
三、Eureka
3.1 Eureka的概述
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS云域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。同时,它也是Spring Cloud Netflix微服务套件中的一部分,可以与Spring Boot构建的微服务很容易地整合起来。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观地看到。Eureka Client是一个Java客户端,用于简化与Eureka Server的交互,客户端同时也内置了一个使用轮询(round-robin)负载算法的负载均衡器。
在应用程序运行时,Eureka客户端会向注册中心注册自身提供的服务,并周期性地发送心跳来更新它的服务租约。同时,它也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性地刷新服务状态。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
3.2 搭建Eureka环境
步骤:
1. 创建Eureka项目,并引入依赖:
版本version通过dependencytManager标签引入Spring-cloud依赖来管理
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
2.在启动类上加上 注解@EnableEurekaServer
3.在application.yml中配置Eureka
常用的配置:
server:port: 10086
spring:application:name: eurekaserver # 设置当前应用的名字,这个名字会在Eureka Server上显示 cloud:eureka:client:# 注册中心的地址,如果是集群,则用逗号分隔 service-url:defaultZone: http://localhost:8761//# 可以配置多个Eureka Server地址,用逗号分隔 # defaultZone: http://eureka1.com/eureka/,http://eureka2.com/eureka/
更多的配置:(根据需要选择)
server:port: 10086
spring:application:name: your-service-name # 设置当前应用的名字,这个名字会在Eureka Server上显示 cloud:eureka:client:# 注册中心的地址,如果是集群,则用逗号分隔 service-url:defaultZone: http://localhost:8761/eureka/# 可以配置多个Eureka Server地址,用逗号分隔 # defaultZone: http://eureka1.com/eureka/,http://eureka2.com/eureka/ # 是否将自己注册到Eureka Server,默认为true register-with-eureka: true# 是否从Eureka Server获取注册信息,默认为true fetch-registry: true# Eureka客户端向服务端发送心跳的时间间隔,单位为秒,默认为30秒 heartbeat-interval-in-seconds: 30# Eureka客户端获取服务列表的缓存间隔,单位为秒,默认为30秒 cache-refresh-interval-in-seconds: 30# Eureka客户端在接收到服务端的心跳后,等待服务端确认的时间,单位为秒,默认为5秒 lease-expiration-duration-in-seconds: 90# Eureka客户端在启动后,向服务端发送心跳的时间间隔,单位为秒,默认为40秒 lease-renewal-interval-in-seconds: 30# Eureka客户端的健康检查路径 healthcheck:path: /actuator/health# Eureka客户端的IP地址,如果不设置,则会自动获取 instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port}# 偏好IP地址,如果设置为true,则使用IP地址注册到Eureka Server,而不是主机名 prefer-ip-address: trueinstance:# 实例的主机名,如果不设置,则默认使用hostName的值 hostname: localhost# 实例的IP地址,如果不设置,则默认使用IP地址 ip-address: ${spring.cloud.client.ipAddress}# 实例的端口号,如果不设置,则默认使用server.port的值 port: ${server.port}# 实例的健康检查路径,Eureka客户端会定期通过这个路径检查服务的健康状况 health-check-url-path: /actuator/health# 实例的状态页路径,通常用于展示服务的详细信息 status-page-url-path: /info# 实例的元数据信息,可以添加任意键值对,用于描述服务的信息 metadata-map:version: 1.0.0environment: dev
3.3 Eureka注册
在注册的类中执行这2个步骤
1.注入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2.application.yml加上:
server:port: 10086
spring:application:name: your-service-name # 设置当前应用的名字,这个名字会在Eureka Server上显示 cloud:eureka:client:# 注册中心的地址,如果是集群,则用逗号分隔 service-url:defaultZone: http://localhost:8761/eureka/# 可以配置多个Eureka Server地址,用逗号分隔 # defaultZone: http://eureka1.com/eureka/,http://eureka2.com/eureka/
3.4 服务获取
四步骤:
1. 引入eureka-client依赖(之前注册的时候引入后就不用再次引入了)
2.在application.yml中配置eureka的信息(之前注册的时候配置后就不用再次配置了)
3.给RestTemplate添加@LoadBalanced注解
4.完成以上三步骤后就可以使用服务提供者的服务名远程调用了
四、Ribbon
4.1 Ribbon概述
在Java领域,Ribbon是一个客户端负载均衡工具,主要用于微服务架构中的服务间调用。Ribbon是Netflix开源的微服务工具套件中的一个组件,它提供了控制HTTP和TCP客户端行为的丰富功能,如负载均衡、熔断、重试机制等。
在微服务架构中,服务间调用是非常常见的场景。Ribbon可以与Spring Cloud集成,使得开发者能够轻松地实现服务之间的调用和负载均衡。它可以帮助我们控制HTTP和TCP客户端的行为,比如连接超时、重试次数、负载均衡算法等。
Ribbon支持多种负载均衡算法,如轮询(Round Robin)、随机(Random)、最小活跃调用数(LeastActive)等。同时,Ribbon还支持自定义负载均衡算法,以满足特定的业务需求。
除了负载均衡功能外,Ribbon还提供了熔断机制,即当某个服务的调用失败率达到一定阈值时,Ribbon会自动熔断该服务的调用,从而避免整个系统受到影响。这种机制有助于提高系统的可用性和稳定性。
4.2 Ribbon原理
Java Ribbon的原理主要涉及客户端负载均衡的实现。Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,当我们将Ribbon与Spring Cloud等微服务框架结合使用时,它可以自动地从服务注册中心(如Eureka)中获取服务提供者的列表。
Ribbon客户端在发起请求时,会根据负载均衡算法从服务提供者列表中选择一个合适的服务实例进行调用。Ribbon支持多种负载均衡算法,如轮询、随机、最小活跃调用数等,以满足不同的业务需求。同时,Ribbon还支持自定义负载均衡算法,允许开发者根据特定的业务需求实现自己的负载均衡策略。
Ribbon还具备熔断机制,当某个服务的调用失败率达到一定阈值时,Ribbon会自动熔断该服务的调用,从而避免整个系统受到影响。这种机制通过隔离故障服务,保证系统的可用性和稳定性。
Ribbon的工作流程大致如下:
- 从服务注册中心获取服务提供者列表。
- 根据负载均衡算法选择一个合适的服务提供者。
- 发起请求到选定的服务提供者。
- 如果请求失败,根据失败次数和阈值判断是否触发熔断机制。
- 如果触发熔断机制,则直接返回错误响应或调用备选方案;否则,重试请求或选择其他服务提供者。
4.3 Ribbon负载均衡的使用
在微服务架构中,Ribbon通常与Eureka(服务发现组件)一起使用,以实现客户端的负载均衡。以下是使用Ribbon的基本步骤:
- 添加依赖:首先,确保在项目的
pom.xml
或build.gradle
文件中添加了Ribbon和Eureka的依赖。 - 配置Eureka客户端:在应用程序的配置文件(如
application.yml
或application.properties
)中,配置Eureka客户端以连接到Eureka Server,并注册服务。 - 启动类注解:在Spring Boot应用程序的启动类上,使用
@EnableDiscoveryClient
注解以启用Eureka服务发现。 - 注入RestTemplate并添加@LoadBalanced注解:在需要调用其他服务的类中,注入一个
RestTemplate
实例,并在其声明处或配置类上添加@LoadBalanced
注解。这将启用Ribbon的客户端负载均衡功能。 - 调用服务:使用注入的
RestTemplate
实例调用其他服务。在URL中,使用服务名称(而不是具体的IP地址和端口)作为主机名。Ribbon将根据Eureka Server中的服务注册表信息,自动将请求路由到合适的服务实例。 - 配置Ribbon客户端:如果需要,可以在应用程序的配置文件中配置Ribbon客户端的各种参数,如连接超时时间、重试机制等。这些配置将影响Ribbon的行为和性能。
- 设置Ribbon负载均衡的范围,如果想设置全局作用范围,那么定义一个IRule,代码如下:
@Bean
public IRule randomRule(){return new RandomRule();
}
如果想局部负载均衡可以通过在application.yml文件中修改规则,代码如下:
userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
作用范围在全局或者局部中选择来设置
4.4 Ribbon饥饿加载
Ribbon的饥饿加载(Hunger Loading)是一种优化策略,旨在降低服务首次访问时的耗时。在Ribbon的默认懒加载(Lazy Loading)模式下,只有在第一次访问服务时才会创建LoadBalancerClient
,并进行服务拉取,这会导致请求时间较长。而在饥饿加载模式下,LoadBalancerClient
会在项目启动时就被创建,并在第一次访问时直接使用,从而减少了首次访问的耗时。
要启用Ribbon的饥饿加载,可以在配置文件中设置ribbon.eager-load.enabled
为true
,并指定需要饥饿加载的服务名称,如:
ribbon: eager-load: enabled: true clients: userservice,orderservice
五、Nacos
5.1 Nacos概述
Nacos是阿里巴巴推出的一个新开源项目,主要用于构建云原生应用的动态服务发现、配置管理和服务管理平台。以下是Nacos的主要功能和特点:
- 服务发现与服务健康检查:Nacos使得服务更容易注册,并允许通过DNS或HTTP接口发现其他服务。同时,它还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
- 动态配置管理:Nacos的动态配置服务允许用户在所有环境中以集中和动态的方式管理所有服务的配置。这消除了在更新配置时重新部署应用程序的需要,使配置更改更加高效和灵活。
- 动态DNS服务:Nacos提供基于DNS协议的服务发现能力,支持异构语言的服务发现。它可以将注册在Nacos上的服务以域名的方式暴露端点,使应用更方便地查阅和发现。
- 服务及其元数据管理:Nacos支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括服务的描述、生命周期、健康状态、流量管理、路由及安全策略等。
5.2 安装Nacos
Nacos下载网址:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - alibaba/nacoshttps://github.com/alibaba/nacos
往下滑动到看到releases,点击进去后点击左上的Tags,选择版本进行下载
注意下载的版本,选择1.x版本,2.x还在测试阶段
5.3Nacos使用
5.3.1设置端口号
打开conf的applicaton.properties文件
可以修改端口号(默认端口号是8848)
5.3.2单机启动Nacos
首先打开bin
然后输入单机启动Nacos的指令:
startup.cmd -m standalone
5.3.3使用Nacos
启动后根据该网址进入Nacos
登录的账号和密码都默认为nacos,登录进来显示:
先配置Nacos
5.4配置Nacos
5.4.1父工程加入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope></dependency>
5.4.2客户端加入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.5.RELEASE</version></dependency>
在application.yml中加入端口号配置的依赖
spring:cloud:nacos:server-addr: localhost:8848
5.5Nacos服务集群配置
在application.yml中加入
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ
5.6Nacos设置负载均衡
在application.yml中加入,service-name是你的服务名称,根据实际情况修改
service-name: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
NacosRule负载均衡策略
(1)优先选择同集群服务实例列表
(2)本地找不到提供者,才会去找其他集群,并且发出警告
(3)确定可用实例列表后,采用随机负载均衡挑选实例
5.7Nacos负载均衡权重设置
通过登录Nacos网站,通过编辑的方式设置权重,权重越低,访问频率越低。
5.8Nacos环境隔离
登录Nacos网址创建命名空间,然后通过在application.yml配置namspace的命名空间的ID,进行环境隔离
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: #填写所创建的命名空间的ID
每个namespace都有唯一的id,同时namespace下的服务不可见
5.9Nacos配置管理
在Nacos的浏览器中进行配置管理
5.10微服务配置拉取
配置过程:注意:bootstrap.yml文件是不存在resource目录中的,需要先进行创建bootstrap.yml文件,配置完bootstrap.yml后可以删除application.yml文件中冲突的部分内容
5.11配置热更新
5.11.1方式一:
5.11.2方式2:
5.12多环境配置共享
5.13Nacos集群搭建
打开cluster,conf,配置端口
在Nacos的application.properties文件中添加数据库信息
nacos3的是:server.port=8847
对nginx配置:
总结:
六、Feign
6.1Feign解决RestTemplate问题:
6.2Feign使用步骤
(1)引入依赖
(2)在service的启动类中添加@EnableFeignClients注解
(3)创建一个client文件夹,自定义接口和使用Feign
完成以上三步骤后可以在Service中进行调用了:
6.3自定义Feign配置
6.3.1配置Feign日志的第一种方式:
6.3.2配置Feign日志的第二种方式:
6.4Feign的优化
6.4.1Feign的优化
6.4.2Feign的优化-连接池配置
6.5Feign的最佳实践
6.5.1通过继承的方式(不推荐)
6.5. 2通过抽取的方式(推荐)
最好采用方式二
七、GateWay网关
7.1网关图解
7.2 搭建网关
7.3路由的断言工厂
7.4路由的过滤器配置
7.4.1局部过滤器配置
7.4.2全局过滤器配置
7.5全局过滤器
实现代码
7.6过滤器执行顺序
7.6跨域问题处理
7.6.1跨域处理的问题
7.6.1跨域问题处理
八、Docker
8.1认识Docker
- Docker是一种轻量级的容器化技术,通过虚拟化技术实现应用程序的隔离和打包。
- Docker提供了容器、镜像、仓库等核心概念,简化了应用程序的开发、部署和运行过程。
- Docker具有轻量性、可移植性和灵活性,帮助开发人员快速构建、测试和部署应用程序,提高了交付效率和可靠性。
8.2Docker与虚拟机
- 启动速度:Docker容器的启动速度非常快,可以达到秒级别,而传统的虚拟机通常需要几分钟来启动。
- 资源消耗:Docker在操作系统级别进行虚拟化,与内核直接交互,几乎没有性能损耗,因此所需的资源更少。而虚拟机需要模拟整个机器,包括硬件,因此资源消耗较大。
- 隔离性:Docker的隔离性较弱,属于进程之间的隔离。而虚拟机可以实现系统级别的隔离,安全性更高。
- 可用性和可恢复性:Docker对事务的高可用支持是通过快速重新部署实现的,而虚拟机具有负载均衡、高可用、容错、搬迁和数据维护等经过生产实践检验的成熟保障机制。
8.3Docker架构
- Docker客户端:这是提供给用户和开发者使用的命令行工具,用户可以通过这个工具与Docker守护进程进行通信,发送请求。
- Docker守护进程(Docker daemon):这是Docker架构中的核心组件,负责管理Docker容器、镜像、网络等。它是一个长时间运行的进程,通过监听Docker客户端的请求并响应来工作。
- Docker镜像:这是Docker应用程序的构建块,是一个轻量级、可移植的打包格式。一个Docker镜像包含了一个完整的可运行环境,包括代码、运行时、库文件、环境变量等。
- Docker容器:这是Docker的核心概念之一,是由Docker镜像创建而来的一个运行实例。Docker容器是轻量级的,可以在几毫秒内启动和停止,可以实现快速部署和扩展。
- Docker注册中心(Docker Registry):这是用来存储和管理Docker镜像的中央仓库。Docker Hub是一个公共的Docker注册中心,用户可以在这里分享和下载Docker镜像。
8.4Docker安装
8.4.1卸载Docker
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce
8.4.2安装Docker
安装yum工具
yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken
更换镜像
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum makecache fast
最后输入命令(docker-ce为社区免费版本。稍等片刻,docker即可安装成功。)
yum install -y docker-ce
8.4.3启动Docker
注意:在开启Docker之前一定要关闭防火墙
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
Docker启动、关闭、重启命令 (输入一条即可)
systemctl start docker # 启动docker服务systemctl stop docker # 停止docker服务systemctl restart docker # 重启docker服务
8.4.4查看Docker版本
docker -v
配置镜像加速(docker官方镜像仓库网速较差,我们需要设置国内镜像服务)
根据阿里巴巴官方文档配置
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrorshttps://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
8.5Docker的基本操作命令
8.5.1Docker拉取镜像nginx
docker pull nginx
8.5.2Docker查看镜像
docker images
8.5.3Docker使用help查看命令
如果想查看save命令则
docker save --help
8.5.4Docker使用save保存镜像
使用save保存镜像到压缩包,压缩包名为nginx.tar
docker save -o nginx.tar nginx:latest
8.5.5Docker删除镜像
nginx:latest是保存镜像的Id
docker rmi nginx:latest
8.5.6Docker读取文件变成镜像
nginx.tar是文件名
docker load -i nginx.tar
8.6Docker练习(去DockerHub搜索并拉取一个Redis镜像)
8.6.1利用docker pull命令拉取redis镜像
docker pull redis
8.6.2利用docker save命令将redis:latest打包为一个redis.tar包
docker save -o redis.tar redis:latest
8.6.3利用docker rmi删除本地的redis:latest
docker rmi redis:latest
8.6.4利用docker load重新加载redis.tar文件
docker load -i redis.tar
8.7Docker容器操作的常见命令
8.7.1Docker容器案例(创建运行一个Nginx容器)
去docker hub查看Nginx的容器运行的命令(不是最终命令,只是命令格式,要修改)
docker run --name containerName -p 80:80 -d nginx
命令解读:
docker run:创建并运行一个容器
--name:给容器起一个名字,例如mn
-p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称,例如nginx
如下所示:
docker run --name mn -p 80:80 -d nginx
查看状态
docker ps
查看日志(-f是持续跟踪日志)
docker logs -f mn
8.7.2Docker容器案例(进入Nginx容器,修改HTNL文件内容)
退出容器
exit
停止容器
docker stop mn
查看所有容器(-a 也包括停止的容器)
docker ps -a
启动容器
docker start mn
删除容器(删除运行中无法成功)
docker rm mn
强制删除(-f)
docker rm -f mn
8.7.3Docker容器案例(创建并运行一个redis容器,并且支持数据持久化)
去docekr hub查询redis查看创建redis容器的命令
创建redis容器
docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes
进入容器
docker exec -it mr bash
启动redis
redis-cli
退出
exit
8.8Docker数据卷
8.8.1Docker操作数据卷
创建数据卷html
docker volume create html
列出所有volume
doceker volume ls
查看html的volume的信息
docker volume inspect html
删除未使用的volume
docker volume prune
或者指定名字删除,例如删除html的volume
docker volume rm html
8.8.2Docker数据卷挂载到容器
8.8.2.1案例(创建一个nginx容器,修改容器内的html目录内的index.html内容)
步骤1:创建容器并挂载数据卷到容器内的HTML目录
docker run --name mn -p 80:80 -v html:/user/share/nginx/html -d nginx
查看是否创建容器成功
docker ps
查看html数据卷挂载目录
docker inspect html
cd Mountpoint目录可以看到挂载目录的文件
总结:
8.8.2.2案例(创建并运行一个MySQL容器,将宿主机目录直接挂载到容器)
进入tmp目录
cd /tmp
加载压缩包为镜像
docker load -i mysql.tar
查看镜像
docker images
创建 mysql/data目录和mysql/conf目录
mkdir -p mysql/data
mkdir -p mysql/conf
在docker hub上查看创建容器的的方法,不过该方法并不完整,我们可以添加端口和数据卷
因为内容较长,我们可以使用 \ 换行
创建mysql容器命令如下
docker run \--name mysql \-e MYSQL_ROOT_PASSWORD=123 \-p 3306:3306 \-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \-v /tmp/mysql/data:/var/lib/mysql \-d \mysql:5.7.25
查看是否创建成功
docker ps
8.9自定义镜像
8.10DockerCompose
8.10.1下载安装DockerCompose
安装后就需要修改文件权限了
chmod +x /usr/local/bin/docker-compose
最后配置Base自动补全命令
8.10.2使用DockerCompose部署微服务集群
#暂时不写
8.11Docker镜像仓库
#暂时不写
9.MQ
9.1认识MQ
9.2RabbitMQ
官网:RabbitMQ: One broker to queue them all | RabbitMQhttps://www.rabbitmq.com/
9.2.1安装RabbitMQ
方式一:在线拉取
docker pull rabbitmq:3-management
方式二:从本地加载
将提供好的镜像包进行上传虚拟机后,使用命令加载镜像
docker load -i mq.tar
查看镜像是否上传成功
docker images
然后创建MQ容器
docker run \-e RABBITMQ_DEFAULT_USER=itcast \-e RABBITMQ_DEFAULT_PASS=123321 \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management
查看容器状态
docker ps
RabbitMQ中的几个概念
9.2.2消息模型
9.2.3RabbitMQ消息队列发送消息的流程
9.2SpringAMQP
9.2.1SpringAMQP简介
9.2.2SpringAMQP的使用
9.2.2.1引入AMQP依赖
9.2.2.2在publisher中编写测试方法,向simple.queue发送消息
9.2.2.3在consumer中编写消费逻辑,监听simple.queue发送消息
9.2.2.4消息预期限制
9.2.3SpringAMQP发布和订阅
9.2.3.1FanoutExchange使用
9.2.3.1.1在consumer服务声明Exchange、Queue、Binding
9.2.3.1.2在consumer服务声明2个消费者
9.2.3.1.3在publisher服务发送消息给FanoutExchanege
9.2.3.2DirectExchange使用
注意:DirectExchange需要指定key
9.2.3.2.1 在consumer服务声明Exchange、Queue
9.2.3.2.2 在publisher服务发送消息到DirectExchange
9.2.3.2.3总结
9.2.3.3TopicExchange
9.2.3.3.1在consumer服务声明Exchange、Queue
9.2.3.3.2在publisher服务发送消息到TopicExchange
9.2.3.4SpringAMQP消息转换器
9.2.3.4.1SpringAMQP消息转换器原理
9.2.3.4.2SpringAMQP消息转换器发送
9.2.3.4.3SpringAMQP消息转换器接收
以下都是elasticsearch相关的内容
10.ES(elasticsearch)分布式搜索
10.1正向索引和倒排索引
10.2索引
10.3MySQL和Elasticsearch的区别
10.4安装ES
因为我们还需要部署Kibana容器,所以人es和kibana容器互联。这里先创建一个网路:(es-net)是创建网络的名字
docker network create es-net
下载镜像
在docker hub上下载镜像,或者上传es.tar镜像包,然后通过运行命令加载即可:
docker load -i es.tar
对于kibana也是如此
10.5运行,部署单点es
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1
查看状况
docker ps
10.6部署Kibana
kibana可以提供一个elasticsearch的可视化界面,便于我们学习
运行docker命令,部署kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1
10.7安装IK分词器
方式一:安装ik插件(在线较慢)
进入容器内部
docker exec -it elasticsearch /bin/bash
在线下载并安装
./bin/elasticsearch-plugin install
https://github.com/medcl/elasticsearch-analysis-
ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
退出
exit
重启容器
docker restart elasticsearch
10.8 IK的扩展和禁用词典
10.8.1 ik分词器-拓展词库
10.8.2禁用词库
配置扩展词和禁用词库后重启es
docker restart es
10.9操作索引库
10.9.1 mapping属性
10.9.2 索引库操作
10.9.3文档操作
11.RestClient操作索引库
11.1导入数据
11.2分析数据库结构
11.3初始化JavaRestClient
11.4创建索引库
11.5删除和判断索引库
12.RestClient操作文档
12.1RestClient新增文档
12.2RestClient查询文档
12.3RestClient更新文档
12.4RestClient删除文档
12.5批量导入文档
13.DSL
13.1DSL查询语法
13.2 全文索引查询
13.3精确查询
13.4 地理查询
13.4.1区域范围
13.4.2距离范围
13.5 DSL查询语法Function Score Query
13.6 DSL查询语法Boolean Query
14.搜索结果处理
14.1对数据排序案例
14.2 对数据分页
14.2.1分页案例
14.2.2深度分页