当前位置: 首页 > news >正文

微服务与Nacos概述-5

引入OpenFeign

添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

定义配置

server.port=6083
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
spring.application.name=service-consumer
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

在主类或者配置类上添加注解以支持OpenClient应用

@EnableFeignClients // 激活 @FeignClient
@EnableDiscoveryClient
@SpringBootApplication
public class Consumer3Application {public static void main(String[] args) {SpringApplication.run(Consumer3Application.class, args);}
}

定义http伪客户端接口

@FeignClient("service-provider") // 指向服务提供者应用
public interface ProviderClient {@GetMapping("/users/hello")public String sayHello(@RequestParam("username") String username);
}

定义控制器,通过feign接口调用远程的服务提供者

@RestController
@RequestMapping("/consumer")
public class ConsumerController {@Autowiredprivate ProviderClient providerClient;@GetMapping("/{name}")public String test(@PathVariable String name){String res = providerClient.sayHello(name);return res;}
}

测试
在这里插入图片描述

负载均衡策略配置

LB中提供了三种负载均衡策略,同时提供接口允许用户自定义扩展
在这里插入图片描述

1、定义配置类

public class FeignClientConfiguration {@Beanpublic ReactorLoadBalancerreactorServiceInstanceLoadBalancer(ObjectProvider
serviceInstanceListSuppliers, Environment environment) {String name =
environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(serviceInstanceListSuppliers, name);}
}

2、可以全局或者局部配置使用设置的负载均衡策略

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
@EnableDiscoveryClient
@SpringBootApplication
public class Consumer3Application {public static void main(String[] args) {SpringApplication.run(Consumer3Application.class, args);}
}

局部配置

@FeignClient(value="service-provider",configuration =
FeignClientConfiguration.class)
public interface ProviderClient {@GetMapping("/users/hello")public String sayHello(@RequestParam("username") String username);
}

失败重试机制配置

如果通过使用OpenFeign访问远程的服务提供者,则可以配置由于网络、连接、读取等问题出现访问失败时,自动执行重试处理

1、首先定义配置

public class FeignClientConfiguration {@Beanpublic Retryer retryer(){return new Retryer.Default(100, 1000, 2);
//表示每间隔100ms,最大间隔1000ms重试一次,最大重试次数是1,因为第三个参数包含了
//第一次请求}
}

2、可以在注解中进行全局配置和局部配置

全局配置

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
@EnableDiscoveryClient
@SpringBootApplication
public class Consumer3Application {public static void main(String[] args) {SpringApplication.run(Consumer3Application.class, args);}
}

局部配置

@FeignClient(value="service-provider",configuration =
FeignClientConfiguration.class)
public interface ProviderClient {@GetMapping("/users/hello")public String sayHello(@RequestParam("username") String username);
}

服务降级配置

在使用注册中心时,OpenFeign作为服务间通信的组件,它本身集成了负载均衡能力、错误重试、日志、服务熔断等机制,同时也能够支持点对点的通信方式,让开发者感觉更像是调用本地接口,而不是发起HTTP请求

具体的服务降级是依赖Sentinel组件实现的,所以需要添加Sentinel依赖

1、添加依赖

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

2、开启服务熔断配置application.properties

feign.circuitbreaker.enabled=true

3、定义对应的Fallback Factory实现

@Component
public class ProviderClientFallbackFactory implements
FallbackFactory<ProviderClient> {@Overridepublic ProviderClient create(Throwable cause) {return new ProviderClient() {@Overridepublic String sayHello(String username) {return cause.getMessage();}};}
}

4、配置使用Fallback降级处理

@FeignClient(value="service-provider",fallbackFactory =
ProviderClientFallbackFactory.class)
public interface ProviderClient {@GetMapping("/users/hello")public String sayHello(@RequestParam("username") String username);
}

查看日志信息

使用lombok提供的日志记录器,自定义编程查看调试信息

1、引入lombok依赖
2、在application.properties中配置日志输出等级
logging.level.com.yan=debug
3、在控制器中自定义输出日志
@Slf4j
public class ConsumerController {@GetMapping("/{name}")public String test(@PathVariable String name){log.error("name:"+name);//输出error等级的日志信息String res = providerClient.sayHello(name);return res;}
}

控制台上查看日志信息输出

在这里插入图片描述

查看Feign日志信息

1、添加配置类FeignClientConfiguration

public class FeignClientConfiguration {@Beanpublic Logger.Level feignLevel(){return Logger.Level.FULL;}
}

2、在FeignClient注解上引用该配置类

全局配置日志输出等级

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
@EnableDiscoveryClient
@SpringBootApplication
public class Consumer3Application {

在控制台上可以输出通过feign调用服务提供者的详细信息

在这里插入图片描述

局部配置日志输出等级

@FeignClient(value="service-provider",configuration =
FeignClientConfiguration.class)
public interface ProviderClient {@GetMapping("/users/hello")public String sayHello(@RequestParam("username") String username);
}

Nacos配置管理

将应用中的所有配置信息进行统一管理,同时当修改配置时会自动通知对应的微服务进行热加载。Nacos在微服务集群中充当了配置管理中心的用途。需求例如有个配置 ma.date.format=yyyy-MM-dd

配置中心的思路是:

  • 首先把项目中各种配置全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。

  • 当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。

  • 当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。

1、添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacosconfig</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.1.5</version>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
</dependency>

2、新增一个配置文件bootstrap.properties或者yaml格式都可以

spring.cloud.nacos.config.server-addr=localhost:8848 服务配置中心的配置
spring.cloud.nacos.config.file-extension=properties 配置使用的后缀名,一般只使用properties和yaml两种格式
spring.cloud.nacos.config.prefix=nacos-service  #配置DataId名称,默认就是服务名称。
#可以人为指定在Nacos中创建的DataID值
spring.cloud.nacos.config.group=DEFAULT_GROUP #默认分组名称
spring.cloud.nacos.config.namespace=public # 所使用的名空间
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
spring.cloud.nacos.config.namespace=public
# 配置自动刷新 对应的格式为nacos:服务名称.properties
spring.config.import=nacos:nacos-config-example.properties?refresh=true

3、核心配置文件application.properties

# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
spring.application.name=nacos-service
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
# 应用服务 WEB 访问端口
server.port=8080

4、定义控制器类可以读取配置信息 ma.date.format

@RefreshScope
@RestController
public class HelloController {@Value("${yan.date.format}") //SpELprivate String dateFormat;@GetMapping("/hello")public String hello(String name) {return new SimpleDateFormat(dateFormat).format(new Date()) +"said:'hello " + name + "!'";}
}

5、在Nacos的webUI中使用图形化界面工具的方式创建一组配置

在这里插入图片描述
输入对应的DataID并选择对应的文件类型
在这里插入图片描述

一般规则【最佳软件开发实践】

  • 命名空间Namespace:不同的项目可以分为不同的命名空间。

  • 配置分组Group:根据项目的不同环境可以一个分组。

  • 配置集Data ID:服务不同环境的不同配置,就是一个配置集

在webUI中可以查看所有的配置信息,并允许编辑修改

在这里插入图片描述

其它操作,例如查看曾经的历史版本内容,并进行回退

在这里插入图片描述

在这里插入图片描述

查看历史配置版本

在这里插入图片描述

查看监听查询
在这里插入图片描述

http://www.lryc.cn/news/125464.html

相关文章:

  • 第九章 动态规划part08(代码随想录)
  • 智能家居(1)---工厂模式实现灯光控制(继电器组)以及火灾报警模组的封装
  • kubernetes的存储卷使用
  • centos 之安装 openssl 1.1.1报错
  • matlab使用教程(16)—图论中图的定义与修改
  • 【C++面向对象】--- 继承 的奥秘(下篇)
  • Android 面试笔记整理-Binder机制
  • 编程小白的自学笔记十三(python办公自动化读写文件)
  • 【Mariadb高可用MHA】
  • 网络五层协议
  • 零售行业供应链管理核心KPI指标(一) – 能力、速度、效率和成本
  • MySQL面试题二
  • 码银送书第五期《互联网广告系统:架构、算法与智能化》
  • 分布式理论
  • Excel设置某列或者某行不某行不可以编辑,只读属性
  • vue elementui v-for 循环el-table-column 第一列数据变到最后一个
  • 宝塔部署阿里云盘webdav
  • Ceph分布式存储系统优化分析
  • supOS APP开发者课程练习册创建服务(命名:getPropertiesHistory)
  • 认识excel篇3之数据的有效性(数据验证)
  • adb 命令行执行单元测试
  • Ceph入门到精通-Linux下Ceph源码编译和GDB调试
  • 【c语言】动态内存管理(超详细)
  • Linux/centos上如何配置管理NFS服务器?
  • Element组件浅尝辄止5:Empty 空状态组件
  • 【华为Datacom 综合拓扑案例—分享篇】
  • springcloud3 使用openfegin实现getpost请求调用
  • 【JVM】类装载的执行过程
  • FreeRTOS(独立看门狗监测任务执行与低功耗Tickless模式)
  • 预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks