admin 管理员组

文章数量: 887021

黑马笔记

目录

微服务和springcloud介绍

【1】服务集群

【2】技术导览

【3】认识微服务 

1、单体架构

2、分布式架构

3、微服务是什么   解决分布式架构的缺点

【4】国内知名微服务治理SpringCloud  阿里巴巴Dubbo

【5】SpringCloud

【6】服务拆分和远程调用

【7】微服务中 提供者和消费者 

Eureka  服务注册和发现

【1】介绍

【2】实践 

【3】服务注册

1)引入依赖

2)配置文件

【3】服务发现 

1)引入依赖

2)配置文件

3)服务拉取和负载均衡

Ribbon 负载均衡

【1】介绍

【2】Ribbon负载均衡实现  irule

【3】Ribbon饥饿加载

NACOS阿里巴巴注册中心

【1】介绍

【2】入门使用

服务多级存储模型 

【3】Nacos的rule负载均衡

权重修改

【4】环境隔离——namespace 

【5】Nacos和Eureka的区别

【6】Nacos配置管理

实现热更新

1.2.1.方式一

1.2.2.方式二

【7】多环境的配置  实现开发测试环境都一样

Feign远程调用

【1】Feign替代RestTemplate

3)编写Feign的客户端

2.2.1.配置文件方式

【2】Feign使用优化

【3】最佳实践 (公司得到的结果)

gateway:网关

【1】介绍

【2】网关入门

2)编写启动类

3)编写基础配置和路由规则

4)重启测试

【3】断言工厂 

【4】过滤器工厂

3.4.2.请求头过滤器

3.4.3.默认过滤器

【5】全局过滤器GlobalFilter

【6】过滤器执行顺序

​编辑

跨域问题解决

 Hystrix 断路

【1】介绍

【2】服务降级

————————————————jemeter压测  20000线程

1、消费者处理降级

2、全局降级

【3】服务熔断

【4】服务监控

config 分布式配置中心 

Docker   

【1】介绍

【2】虚拟机和docker 

【3】 docker架构  : 镜像和容器

【4】docker架构:DockerHub

【5】Docker 安装

0.安装Docker

1.CentOS安装Docker

1.1.卸载(可选)

1.2.安装docker

1.3.启动docker

1.4.配置镜像加速

【6】镜像操作

2.1.3.案例1-拉取、查看镜像

2.1.4.案例2-保存、导入镜像

【6】容器相关命令

【案例】进入容器  修改

【案例】redis容器

【7】挂载  ——不在容器里面更改数据((数据卷  数据管理

需求:创建一个数据卷,并查看数据卷在宿主机的目录位置

挂载容器文件

2.3.5.案例-给nginx挂载数据卷

【8】直接挂载到宿主机

【9】Docker自定义镜像

【10】如何构建Dockerfile语法 

3.3.1.基于Ubuntu构建Java项目

3.3.2.基于java8构建Java项目

3.4.小结

【10】.Docker-Compose

4.1.初识DockerCompose

4.2.安装DockerCompose

4.3.部署微服务集群

4.3.1pose文件

4.3.2.修改微服务配置

4.3.3.打包

4.3.4.拷贝jar包到部署目录

4.3.5.部署

【11】Docker镜像仓库

5.1.搭建私有镜像仓库

5.2.推送、拉取镜像

MQ  消息队列

【1】同步调用

【2】异步调用 

【3】多种MQ技术对比:

【4】快速入门

2.1.安装RabbitMQ

RabbitMQ中的一些角色:

常见消息模型​编辑

SpringAMQP


微服务和springcloud介绍

微服务是一种整体架构

SpringCloud使解决服务之间的调用



【1】服务集群


【2】技术导览

 


【3】认识微服务 

1、单体架构

 优点:

  • 架构简单
  • 部署成本低

缺点

  • 耦合度高

————————————————

2、分布式架构

—————— 

拆分出现的问题:

3、微服务是什么   解决分布式架构的缺点

 缺点 :更复杂的调用部署


【4】国内知名微服务治理SpringCloud  阿里巴巴Dubbo

企业需求 



【5】SpringCloud

基本功能

SpringBoot的自动装配  实现框架集成

 boot  和 cloud的兼容关系



【6】服务拆分和远程调用

不开发相同模块

数据库独立

暴露接口给其他服务调用

案例讲解

导入demo  百度网盘 请输入提取码

配置自己的数据库信息 

 远程调用

将服务作为发送请求的一方(类似前端ajax)  向一方发送请求 ,数据反会给服务调用方

如何在java代码发送http请求

利用其发送请求得到信息封装  下面改成getUserId()

 硬编码 高耦合   。。。。。。。。。。。。。。



【7】微服务中 提供者和消费者 



Eureka  服务注册和发现

【1】介绍

 注册信息(每个服务启动时)  调用信息(找到服务  复杂均衡)   远程调用  心跳持续 30秒一次是调用者知道健康信息

 

角色分配



【2】实践 

搭建

新建一个Eureka服务

原工程新建模块  新建maven工程

 

添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

创建main  启动

错误总结  中间停止了依赖的下载 导致没有下全 使得注解找不到  

删除本地仓库依赖

 添加yml文件

server:
  port: 10086
spring:
  application:
    name: eureka-server  #服务名称 为了将自己注册到自己身上  Eeruka自己也是一个微服务
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

Eureka  地址



【3】服务注册

service

下面,我们将user-service注册到eureka-server中去。

1)引入依赖

在user-service的pom文件中,引入下面的eureka-client依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2)配置文件

在user-service中,修改application.yml文件,添加服务名称、eureka地址:

spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

————————其他同理


注册列表服务  注意更改端口

 

 



【3】服务发现 

下面,我们将order-service的逻辑修改:向eureka-server拉取user-service的信息,实现服务发现。

1)引入依赖

之前说过,服务发现、服务注册统一都封装在eureka-client依赖,因此这一步与服务注册时一致。

在order-service的pom文件中,引入下面的eureka-client依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2)配置文件

服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息:

在order-service中,修改application.yml文件,添加服务名称、eureka地址:

spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

3)服务拉取和负载均衡

最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。

不过这些动作不用我们去做,只需要添加一些注解即可。

————————————

解决ip端口不用的信息

 访问





localhost:8080/order/101  

localhost:8080/order/102

 



Ribbon 负载均衡

【1】介绍

 

     

  请求

 

 

 轮询调度 随机    等等


【2】Ribbon负载均衡实现  irule

 

通过定义IRule实现可以修改负载均衡规则,有两种方式:

针对全部微服务

  1. 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

@Bean
public IRule randomRule(){
    return new RandomRule();
}

只针对userservice

  1. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: comflix.loadbalancer.RandomRule # 负载均衡规则 



【3】Ribbon饥饿加载

 写在要调用别人的服务里面  以order的服务为例



NACOS阿里巴巴注册中心

【1】介绍

功能更多  支持配置中心

Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

主要差异在于:

  • 依赖不同

  • 服务地址不同

# Nacos安装指南



# 1.Windows安装

开发阶段采用单机安装即可。

## 1.1.下载安装包

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:

GitHub主页:https://github/alibaba/nacos

GitHub的Release下载页:https://github/alibaba/nacos/releases

如图:

![image-20210402161102887](assets/image-20210402161102887.png)



本课程采用1.4.1.版本的Nacos,课前资料已经准备了安装包:

![image-20210402161130261](assets/image-20210402161130261.png)

windows版本使用`nacos-server-1.4.1.zip`包即可。



## 1.2.解压

将这个包解压到任意非中文目录下,如图:

![image-20210402161843337](assets/image-20210402161843337.png)

目录说明:

- bin:启动脚本
- conf:配置文件



## 1.3.端口配置

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。

**如果无法关闭占用8848端口的进程**,也可以进入nacos的conf目录,修改配置文件中的端口:

![image-20210402162008280](assets/image-20210402162008280.png)

修改其中的内容:

![image-20210402162251093](assets/image-20210402162251093.png)



## 1.4.启动

启动非常简单,进入bin目录,结构如下:

![image-20210402162350977](assets/image-20210402162350977.png)

然后执行命令即可:

- windows命令:

  ```
  startup.cmd -m standalone
  ```


执行后的效果如图:

![image-20210402162526774](assets/image-20210402162526774.png)



## 1.5.访问

在浏览器输入地址:http://127.0.0.1:8848/nacos即可:

![image-20210402162630427](assets/image-20210402162630427.png)

默认的账号和密码都是nacos,进入后:

![image-20210402162709515](assets/image-20210402162709515.png)





# 2.Linux安装

Linux或者Mac安装方式与Windows类似。

## 2.1.安装JDK

Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。

上传jdk安装包:

![image-20210402172334810](assets/image-20210402172334810.png)

上传到某个目录,例如:`/usr/local/`



然后解压缩:

```sh
tar -xvf jdk-8u144-linux-x64.tar.gz
```

然后重命名为java



配置环境变量:

```sh
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
```

设置环境变量:

```sh
source /etc/profile
```





## 2.2.上传安装包

如图:

![image-20210402161102887](assets/image-20210402161102887.png)

也可以直接使用课前资料中的tar.gz:

![image-20210402161130261](assets/image-20210402161130261.png)

上传到Linux服务器的某个目录,例如`/usr/local/src`目录下:

![image-20210402163715580](assets/image-20210402163715580.png)



## 2.3.解压

命令解压缩安装包:

```sh
tar -xvf nacos-server-1.4.1.tar.gz
```

然后删除安装包:

```sh
rm -rf nacos-server-1.4.1.tar.gz
```

目录中最终样式:

![image-20210402163858429](assets/image-20210402163858429.png)

目录内部:

![image-20210402164414827](assets/image-20210402164414827.png)



## 2.4.端口配置

与windows中类似



## 2.5.启动

在nacos/bin目录中,输入命令启动Nacos:

```sh
sh startup.sh -m standalone
```







# 3.Nacos的依赖

父工程:

```xml
<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>
```



客户端:

```xml
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

```







最快速打开cmd窗口的办法是,直接在地址栏输入 cmd 回车 即可 

单机模式 stndalone



【2】入门使用

直接父接pom添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

注释eureka的依赖

添加依赖放在  服务中  所有服务

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件修改  所有服务

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 

 查看复杂均衡



服务多级存储模型 

 访问最近的集群最好

默认表示没有

 

添加

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称

我们再次复制一个user-service启动配置,添加属性:

```sh
-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
```

配置如图所示:

 



【3】Nacos的rule负载均衡

 配置order的集群为HZ

试试访问的是不是最近的集群

http://localhost:8080/order/101

http://localhost:8080/order/102

http://localhost:8080/order/103

就在所有user服务被访问   因为设置为轮询

修改复杂均衡规则

2)修改负载均衡规则

修改order-service的application.yml文件,修改负载均衡规则:

```yaml
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 
```

当同集群的服务之间调用 集群中挂了  假设HZ的挂了  就将访问其他集群  但是会在日志中里记录。



权重修改

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在上图的编辑

修改权重

  

权重为0就是不访问服务

可以使用在服务升级 将某个服务权重没有    修改问一起更新。。



【4】环境隔离——namespace 

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace

  • namespace下可以有group、service,想关性较高的服务放一个组等

  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

默认情况下,所有service、data、group都在同一个namespace,名为public:

我们可以点击页面新增按钮,添加一个namespace:

然后,填写表单:

就能在页面看到一个新的namespace:

 

给微服务配置namespace只能通过修改配置来实现。

例如,修改order-service的application.yml文件:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

重启order-service后,访问控制台,可以看到下面的结果:

相互隔离了  找不到uesrseivice实例



【5】Nacos和Eureka的区别

默认都是临时实例

 非临时实例会在被nacos主动询问是否还存活   宕机了就将他标记它不健康  等待活过来

nacos还会主动推出消息,告诉服务消费者。。

  • Nacos与eureka的共同点

    • 都支持服务注册和服务拉取

    • 都支持服务提供者心跳方式做健康检测

  • Nacos与Eureka的区别

    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

    • Nacos集群默

本文标签: 你不 来看看 SpringCloud