SpringCloud微服务 黑马教程 自我总结笔记

来源出处:

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from=333.337.search-card.all.click

一、认识微服务

微服务是一种软件架构风格,它将传统的单体应用程序拆分为一系列小型、独立的服务。每个服务都围绕着特定的业务功能构建,并且可以独立地运行、扩展和更新,而不会影响其他服务。这种架构风格为软件开发带来了许多优势和挑战。

微服务的主要优势:

  1. 可扩展性:由于每个服务都是独立的,因此可以根据需求独立扩展,而无需对整个应用程序进行扩展。
  2. 灵活性:不同的团队可以使用最适合的技术栈同时开发不同的服务,从而提高了开发效率。
  3. 弹性:单个微服务的故障不会影响整个应用程序,增强了系统的弹性和可用性。
  4. 部署和集成:持续集成和部署更容易、更高效,因为可以对单个服务进行更改,而无需重新部署整个应用程序。
  5. 维护和调试:更小的代码库和关注点分离使维护和调试更易于管理。

二、服务远程调用

通过注册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的工作流程大致如下:

  1. 从服务注册中心获取服务提供者列表。
  2. 根据负载均衡算法选择一个合适的服务提供者。
  3. 发起请求到选定的服务提供者。
  4. 如果请求失败,根据失败次数和阈值判断是否触发熔断机制。
  5. 如果触发熔断机制,则直接返回错误响应或调用备选方案;否则,重试请求或选择其他服务提供者。

 4.3 Ribbon负载均衡的使用

在微服务架构中,Ribbon通常与Eureka(服务发现组件)一起使用,以实现客户端的负载均衡。以下是使用Ribbon的基本步骤:

  1. 添加依赖:首先,确保在项目的pom.xmlbuild.gradle文件中添加了Ribbon和Eureka的依赖。
  2. 配置Eureka客户端:在应用程序的配置文件(如application.ymlapplication.properties)中,配置Eureka客户端以连接到Eureka Server,并注册服务。
  3. 启动类注解:在Spring Boot应用程序的启动类上,使用@EnableDiscoveryClient注解以启用Eureka服务发现。
  4. 注入RestTemplate并添加@LoadBalanced注解:在需要调用其他服务的类中,注入一个RestTemplate实例,并在其声明处或配置类上添加@LoadBalanced注解。这将启用Ribbon的客户端负载均衡功能。
  5. 调用服务:使用注入的RestTemplate实例调用其他服务。在URL中,使用服务名称(而不是具体的IP地址和端口)作为主机名。Ribbon将根据Eureka Server中的服务注册表信息,自动将请求路由到合适的服务实例。
  6. 配置Ribbon客户端:如果需要,可以在应用程序的配置文件中配置Ribbon客户端的各种参数,如连接超时时间、重试机制等。这些配置将影响Ribbon的行为和性能。
  7. 设置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.enabledtrue,并指定需要饥饿加载的服务名称,如:

ribbon:  eager-load:  enabled: true  clients: userservice,orderservice

五、Nacos

5.1 Nacos概述

Nacos是阿里巴巴推出的一个新开源项目,主要用于构建云原生应用的动态服务发现、配置管理和服务管理平台。以下是Nacos的主要功能和特点:

  1. 服务发现与服务健康检查:Nacos使得服务更容易注册,并允许通过DNS或HTTP接口发现其他服务。同时,它还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。
  2. 动态配置管理:Nacos的动态配置服务允许用户在所有环境中以集中和动态的方式管理所有服务的配置。这消除了在更新配置时重新部署应用程序的需要,使配置更改更加高效和灵活。
  3. 动态DNS服务:Nacos提供基于DNS协议的服务发现能力,支持异构语言的服务发现。它可以将注册在Nacos上的服务以域名的方式暴露端点,使应用更方便地查阅和发现。
  4. 服务及其元数据管理: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/nacosicon-default.png?t=N7T8https://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

  1. Docker是一种轻量级的容器化技术,通过虚拟化技术实现应用程序的隔离和打包。
  2. Docker提供了容器、镜像、仓库等核心概念,简化了应用程序的开发、部署和运行过程。
  3. Docker具有轻量性、可移植性和灵活性,帮助开发人员快速构建、测试和部署应用程序,提高了交付效率和可靠性。

8.2Docker与虚拟机

  1. 启动速度:Docker容器的启动速度非常快,可以达到秒级别,而传统的虚拟机通常需要几分钟来启动。
  2. 资源消耗:Docker在操作系统级别进行虚拟化,与内核直接交互,几乎没有性能损耗,因此所需的资源更少。而虚拟机需要模拟整个机器,包括硬件,因此资源消耗较大。
  3. 隔离性:Docker的隔离性较弱,属于进程之间的隔离。而虚拟机可以实现系统级别的隔离,安全性更高。
  4. 可用性和可恢复性:Docker对事务的高可用支持是通过快速重新部署实现的,而虚拟机具有负载均衡、高可用、容错、搬迁和数据维护等经过生产实践检验的成熟保障机制。

8.3Docker架构

  1. Docker客户端:这是提供给用户和开发者使用的命令行工具,用户可以通过这个工具与Docker守护进程进行通信,发送请求。
  2. Docker守护进程(Docker daemon):这是Docker架构中的核心组件,负责管理Docker容器、镜像、网络等。它是一个长时间运行的进程,通过监听Docker客户端的请求并响应来工作。
  3. Docker镜像:这是Docker应用程序的构建块,是一个轻量级、可移植的打包格式。一个Docker镜像包含了一个完整的可运行环境,包括代码、运行时、库文件、环境变量等。
  4. Docker容器:这是Docker的核心概念之一,是由Docker镜像创建而来的一个运行实例。Docker容器是轻量级的,可以在几毫秒内启动和停止,可以实现快速部署和扩展。
  5. 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/mirrorsicon-default.png?t=N7T8https://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 | RabbitMQicon-default.png?t=N7T8https://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深度分页

 

14.2.3对数据进行 高亮 处理

15.RestClient

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BEV系列一:BEV介绍和常用BEV算法简介

BEV系列一&#xff1a;BEV介绍和常用BEV算法简介 自动驾驶最全学习资料获取&#xff1a;链接

学生时期学习资源同步-1 第一学期结业考试题6

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载

高效Go编程: encoding/csv标准库深度解析

高效Go编程: encoding/csv标准库深度解析 引言了解encoding/csv库CSV文件的基本结构encoding/csv库的核心功能应用场景 读取CSV文件基本步骤代码示例处理不同的分隔符错误处理 处理CSV数据数据解析代码示例处理不规则数据代码示例 写入CSV文件基本步骤代码示例自定义设置错误处…

群发邮件软件哪个好?8款国际流行软件推荐与评测

无论是小型企业还是大型企业&#xff0c;都需要一个高效、稳定且功能全面的群发邮件软件来完成营销任务。市场上的群发邮件软件琳琅满目&#xff0c;如Zoho Campaigns、Constant Contact、Intuit Mailchimp、Moosend、MailerLite、Systeme.io、Instantly、Saleshandy等&#xf…

Java Web程序的部署

写在前&#xff1a;要想将我们写好的项目让其他人可以访问&#xff0c;仅仅完成代码是不能直接运行的。这就需要在Linux系统上搭建Java web程序的运行环境。这里以我所做的博客系统为例&#xff0c;进行搭建。 1. 准备依赖 &#xff08;1&#xff09;JVM&#xff08;JDK&#…

react04- mvc 、 mvvm

MVC与MVVM stackoverflow论坛网站 react前端框架 使用框架前&#xff1a; 操作dom > js获取dom元素&#xff0c;事件侦听&#xff0c;修改数据&#xff0c;设置样式。。。 操作dom问题: 直接操作dom&#xff0c;会造成大量的回流、重绘&#xff0c;消耗大量性能操作起来也…

Nodejs 第五十四章(net)

net模块是Node.js的核心模块之一&#xff0c;它提供了用于创建基于网络的应用程序的API。net模块主要用于创建TCP服务器和TCP客户端&#xff0c;以及处理网络通信。 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输协议&#xff0c;用于…

计网《二》|物理层|信道极限容量|码分复用|曼彻斯特编码

计网《二》|物理层 物理层的基本概念数据通信的基础知识数据通信模型常用术语有关信道的几个基本概念调制基带调制带通调制 常用编码方式不归零制归零编码曼彻斯特编码差分曼彻斯特编码 基本调制方法 信道的极限容量限制码元在信道上的传播速率的两个因素信道能够通过的频率范围…

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中&#xff0c;最常见的基本类型就是字符串了&#xff0c;哪哪都能见到&#xff0c;如输入语句&#xff0c;输出语句等&#xff01;那么&#xff0c;什么是字符串呢&#xff0c;字符串就是String类&#xff0c;String类是Ja…

市场复盘总结 20240314

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

【计算机视觉】一、计算机视觉概述

文章目录 一、计算机视觉二、计算机视觉与其它学科领域的关系1、图像处理2、计算机图形学3、模式识别4、人工智能&#xff08;AI&#xff09;5、神经生理学与认知科学 三、计算机视觉的应用1. 人脸识别2. 目标检测3. 图像生成4. 城市建模5. 电影特效6. 体感游戏动作捕捉7. 虚拟…

【学一点RISC-V】RISC-V IMSIC

IMSIC RISC-V AIA 文档 第三章 Incoming MSI Controller (IMSIC) 传入 MSI 控制器&#xff08;IMSIC&#xff09;是一个可选的 RISC-V 硬件组件&#xff0c;与 hart 紧密相连&#xff0c;每个 hart 有一个 IMSIC。IMSIC 接收并记录 Hart 的传入消息信号中断 (MSI)&#xff0c;并…