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知识库 -> 微服务Nacos |LoadBalancerClient |R -> 正文阅读

[Java知识库]微服务Nacos |LoadBalancerClient |R

一. 先要一个服务的管理平台Nacos(注册,发现,配置)

1.解压nacos或下载(https://github.com/alibaba/nacos/releases)(版本1.4.1)

2.在数据库执行config文件中nacos-mysql.sql脚本(脚本可能不带创建库)

3.打开/conf/application.properties文件,配置数据源和数据库

4.windows打开Nacosstartup.cmd -m standalone(要么bin目录cmd,要么配置环境变量)

5.localhost:8848打开,默认账号密码为nacos/nacos

二. 需要一个消费服务方来调用提供服务方,都注册到Nacos

1. 创一个parent工程(01-sca),分别让消费和提供继承

1.1 pom文件中三个依赖 SpringBoot, SpringCloud, SpringCloudAlibaba

2. 创建提供方服务工程(sca-provider)

2.1 pom文件中两依赖 Web(spring-boot-starter-web)和服务注册和发现nacos(spring-cloud-starter-alibaba-nacos-discovery)

2.2 创建并修改配置文件application.yml

server:
   port: 8081
spring:
  application:
    name: sca-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

2.3 创建启动类,定义控制层和方法,让其消费服务调用

3. 创建消费服务方

3.1 pom文件的两依赖 Web和注册服务到Nacos

3.2 修改配置文件application.yml

3.3 创建启动类通过RestTemplate(客户端)调用提供方

3.3.1 new一个RestTemplate(客户端)方法,通过@Bean交给Spring容器管理

3.3.2 注入到controller类,restTemplate自带的方法getForObject(提供方url,返回值的class)

3.4 启动消费方和提供方的服务,调用消费方的方法,会自动访问提供方的方法

三. 访问成功再实现负载均衡,提供方多在nacos部署几个服务(换端口启动,需在提供方设置(Allow parallel run)并发 (四种负载均衡)

3.1 手写随机算法,将服务都放到数组,通过下标静态实现负载均衡

3.2 注入LoadBalancerClient对象,通过loadBalancerClient.choose(“sca-provider”)动态获取IP和端口,拼接url实现服务之间调用

3.3 使用@LoadBalanced对构建RestTemplate的方法进行修饰,再注入loadBalancedRestTemplate,Spring会为其设置LoadBalancerInterceptor的拦截器,拦截器获取端口和IP,直接拼接url实现服务之间调用 相比3.2简化代码,降低了效率.

String url=String.format("http://%s/provider/echo/%s","sca-provider",appName);

3.4 基于Feign的远程服务调用,看五

四. Spring Cloud核心组件 Ribbon

4.1 负载均衡实现默认是因为Nacos集成了Ribbon来实现的

4.2 基于负载均衡策略进行服务调用, 所有策略都会实现IRule接口

4.3 Ribbon 内置的负载策略有8种,查看IRule接口的实现类进行分析

4.4 Ribbon中定义了一些负载均衡算法,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务

五. 基于Feign的远程服务调用

5.1 特点

1 服务消费方基于rest方式请求服务提供方的服务时,一种直接的方式就是自己拼接url,拼接参数然后实现服务调用,但每次服务调用都需要这样拼接,代码量复杂且不易维护,此时Feign诞生。
2 底层封装了对Rest技术的应用,通过Feign可以简化服务消费方对远程服务提供方法的调用实现
3 Feign 最早是由 Netflix 公司进行维护的,后来 Netflix 不再对其进行维护,最终 Feign 由一些社区进行维护,更名为 OpenFeign。
4 可以更好的创建层次结构dao,service,controller

5.2 在服务消费方添加OpenFeign依赖(spring-cloud-starter-openfeign)

5.3 在启动类添加@EnableFeignClients,扫描包下所由@FeignClient注解描述的接口

5.4 写一个接口 @FeignClient,底层自动创建实现类

/**
 * @FeignClient 注解用于描述远程服务调用接口,这个接口不需要你写实现类,你
 * 只需要定义访问规则即可(例如请求方式,请求url,请求参数).
 * @FeignClient注解描述的接口的实现类对象会默认交给spring管理,这个bean对象
 * 的名字默认就是name属性指定的值,这个name还有一个层面的含义,就是你远程调用的
 * 服务名.
 * 说明:假如@FeignClient注解中添加了contextId属性,则这个属性值默认
 * 会作为当前bean对象的名字,此时name的值仅仅作为要调用的服务名对待,一般
 * 推荐contextId的值默认为@FeignClient注解描述的接口的名字(首字母小写)
 * contextId,作为远程调用服务的唯一标识
 */
//描述远程调用接口,这个接口不需要写实现类,只需要定义规则即可(请求方式,请求url,请求参数)
@FeignClient(name="sca-provider",
            contextId = "remoteProviderService",
            fallbackFactory = ProviderFallbackFactory.class)
public interface RemoteProviderService {
    //@GetMapping表示以get请求方式调用远端服务
    //"/provider/echo/{msg}"为远程调用服务的url
    @GetMapping("/provider/echo/{msg}")
    String echoMsg(@PathVariable("msg") String msg);
}

5.5 创建FeignConsumerController中,注入接口实现类,调用接口方法,实现服务调用

5.6 调用的服务突然不可用了或者调用过程超时,通过断融返回提示信息

5.6.1 定义FallbackFactory接口的实现

/**
 * 基于此对象处理RemoteProviderService接口调用时出现的服务中断,超时等问题
 */
@Component
public class ProviderFallbackFactory
        implements FallbackFactory<RemoteProviderService> {
    /**
     * 此方法会在RemoteProviderService接口服务调用时,出现了异常后执行.
     * @param throwable 用于接收异常
     */
    @Override
    public RemoteProviderService create(Throwable throwable) {
        return (msg)->{
                return "服务维护中,稍等片刻再访问";
        };
    }
}

5.6.2 在Feign访问接口中应用FallbackFactory对象

5.6.3 配置文件application.yml,启动feign方式调用时的服务中断处理机制

feign:  
  hystrix:
    enabled: true #默认值为false

5.7 服务端添加Thread.sleep(50000)测试中断

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 14:57:12  更:2021-08-20 14:59:00 
 
开发: 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 5:17:52-

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