IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springCloud -> 正文阅读

[Java知识库]springCloud

注册RestTemplate

?提供者与消费者

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口
服务A调用服务B,服务B调用服务C,那么服务B是什么角色?---提供者与消费者角色其实是相对的
一个服务可以同时是服务提供者和服务消费者

Eureka服务注册

? ? ? ?就是把每个服务注册在Eureka中

1:创建eureka-server模块? ? ??

?导入依赖

  spring-cloud-starter-netflix-eureka-server

eureka-server模块要在xml中配置

spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

2:创建eureka的客户端(order-service和user-service模块)

导入依赖? ? ? ?

????????spring-cloud-starter-netflix-eureka-client

客户端配置xml

spring:
  application:
    name: orderserver # order-service的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka
spring:
  application:
    name: userserver # user-service的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

3:访问eureka注册信息

boot启动eureka-service模块和两个客户端模块,然后浏览器访问http://localhost:10086/

?4:模拟多实例部署

? ? ? ? 将userservice启动多次

?浏览器再次访问eureka,查看注册信息,发现多一个

Eureka服务发现

开启负载均衡策略

?服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:

?负载均衡的流程


负载均衡策略

方式一:改变负载均衡的策略(代码方式)

作用范围:order访问任何微服务都按这个策略来

/**
     * 更改负载均衡的策略
     */
    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }

方式二:改变负载均衡的策略(xml方式)

作用范围:只针对orderService而言的

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

饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

xml配置

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: # 指定饥饿加载的服务名称--可以写多个服务名称
      - userservice

Nacos注册中心

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高

安装:解压到E:\Enviroment

单机启动

E:\Enviroment\nacos\bin
startup.cmd -m standalone
访问
浏览器 http://127.0.0.1:8848/nacos(账户密码默认是nacos)

?引入依赖

父工程spring-cloud-alibaba-dependencies

子模块把eureca的依赖注释掉,然后添加依赖

spring-cloud-starter-alibaba-nacos-discovery
spring-cloud-starter-alibaba-nacos-config

nacos的xml配置

?(orderservice和userservice服务都要配置)

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # nacos服务地址
#      discovery:
#        namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev环境
#        ephemeral: false # 是否是临时实例

启动并测试:

Nacos服务分级存储模型

问题:一个服务(userservice)有多个实例(userservice:8081、userservice:8082)

?当实例太多时,如果把所有的实例放一个地方容易不安全。所以,我们会把一个服务的多个实例部署到多个机房。

同在一个机房的多个实例,叫一个集群

一个服务可以有多个集群,一个集群可以有多个实例

?服务跨集群调用问题

服务调用尽可能选择本地集群的服务,跨集群调用延迟较高 本地集群不可访问时,再去访问其它集群

集群配置

指定哪些实例,是一个集群。(同一个实例的,cluster-name用一个名字就表示一个集群)

这里配置UserApplication 、UserApplication2是一个集群,集群名是HZ

?boot启动orderserviceApplication和UserApplication 、UserApplication2

浏览器访问? ?http://127.0.0.1:8848/nacos

NacosRule负载均衡策略

优先选择同集群服务实例列表 本地集群找不到提供者,才去其它集群寻找,并且会报警告 确定了可用实例列表后,再采用随机负载均衡挑选实例

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

服务实例的权重设置

问题:实际部署中会出现这样的场景: 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求 Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高

?实例的权重控制

????????Nacos控制台可以设置实例的权重值,0~1之间

????????同集群内的多个实例,权重越高被访问的频率越高

????????权重设置为0则完全不会被访问

浏览器的nacos的权重设置(服务管理-服务列表-详情里设置-编辑-权重)

环境隔离(namespace)

? ? ? 不同环境的模块互相访问不了,相互隔离

nacos查看命名空间,发现只有个默认的

?新建命名空间

?命名空间创建成功,并且产生一个该命名空间的唯一id

?xml配置

?nacos查看,该模块跑到dev环境中啦

Nacos与eureka的共同点

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

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

Nacos与Eureka的区别

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

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

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

????????Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

临时实例和非临时实例

????????临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会

XML配置

统一配置管理

????????配置更改热更新(不用重启服务就能生效)

?新建配置:配置文件的id格式(服务名+profile+后缀名)

添加成功?

?微服务配置拉取

?引入依赖(nacos的配置管理客户端依赖)? ? ??

????????spring-cloud-starter-alibaba-nacos-config

在userservice中的resource目录创建一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:

再把application和bootstrap的重复信息删除就行

获取nacos配置的信息

方式一:@Value("${pattern.dateformat}")获取

在类上添加@RefreshScope的注解

????????(配置自动刷新--微服务不用重启,就能热获取 nacos的配置信息(这里配的是时间格式))

方式二:configurationproperties()推荐

?测试

?浏览器访问

?在nacos修改时间的格式

?再次访问,发现nacos热配置成功

多环境配置共享

?新建配置(这是是共享的,无论在什么环境)?

获取配置信息

浏览器访问,已经读取到

?改变下环境,再次浏览器访问试试---发现仍然能拿到值

多种配置的优先级:

????????服务名-profile.yaml ?>服务名称.yaml ?> ?本地项目配置

Nacos的集群搭建

解压nacos-server-1.4.1.zip,成nacos文件夹

????????Nacos生产环境下一定要部署为集群状态

配置cluster.conf和application.properties文件

?把nacos文件夹复制三份,分别命名nacos1、nacos2、nacos3

然后在application.properties文件把端口分别设置8845、8846、8847

对3个nacos进行启动

每个nacos文件夹的bin目录cmd输入(不带-m就默认是集群启动)

startup.cmd

配置ngnix

?启动ngnix服务器

????????(在E:\Enviroment\nginx-1.22.0目录进行cmd输入start ngnix)

访问(localhost:80/nacos)

?修改yml的端口号(和ngnix保持一致),并启动user-service项目

?nacos就有了

?新建配置

?新建成功

?发现新建配置后,数据库多了一条数据

http客户端Feign

?问题:

用Feign客户端代替RestTemplate

引入依赖

spring-cloud-starter-openfeign

添加注解@EnableFeignClients? ? //开启feign自动装配功能

?编写客户端,做接口声明

?修改yml中nacos服务地址的端口号为80(和nginx配置监听端口号保持一致)

?启动orderservice服务和userservice服务

????????检查nacos是否注册进来了

访问

自定义Feign的配置

更改日志级别(?xml方式)
? ? ? ? 默认是none

方式二:代码方式

性能优化

?引入依赖

????????feign-httpclient

yml配置

feign:
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 # 最大连接数
    max-connections-per-route: 50 # 单个路径的最大连接数

Feign的最佳实践

?

最佳实践方式二(抽取)

首先创建一个module,命名为feign-api,并引入feign的starter依赖

????????spring-cloud-starter-openfeign

将order-service中编写的UserClient、User、DefaultFeignConfiguration都剪切到feign-api项目中

在order-service中引入feign-api的依赖(这个依赖就是刚刚创建的feign-api模块)

修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包 重启测试

网关Gateway

????????使用GateWay网关进行服务请求路由的统一管理,它是系统对外的唯一入口

为什么需要网关?

创建gateway模块

?引入依赖

????????spring-cloud-starter-gateway?
????????spring-cloud-starter-alibaba-nacos-discovery

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:12:25  更:2022-11-05 00:18:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 7:26:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码