微服务与Nacos概述-5

news2025/1/16 9:16:47

引入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 {
    @Autowired
    private ProviderClient providerClient;
    @GetMapping("/{name}")
    public String test(@PathVariable String name){
        String res = providerClient.sayHello(name);
        return res;
    }
}

测试
在这里插入图片描述

负载均衡策略配置

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

1、定义配置类

public class FeignClientConfiguration {
    @Bean
    public ReactorLoadBalancer
    reactorServiceInstanceLoadBalancer(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 {
    @Bean
    public 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> {
    @Override
    public ProviderClient create(Throwable cause) {
        return new ProviderClient() {
            @Override
            public 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 {
    @Bean
    public 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}") //SpEL
    private 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.coloradmin.cn/o/869317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】CentOS7.3环境下安装Mysql 8.0.30

CentOS7.3环境下安装Mysql 8.0.30 1.mysql官网下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 2.上传安装包到linux服务器并解压 tar -vxf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz修改名称 mv mysql-8.0.30-linux-glibc2.12-x86_6…

中心极限定理例题

关于大数定律的两个题目。 例1 注意牢记公式&#xff1a; P { X } P { ∑ i 1 n x i − n μ n σ < x } ∫ − ∞ x e − x 2 2 d x 2 π P\{ X\} P \{\frac { \sum_{i1}^{n} x_i - n \mu}{\sqrt {n} \sigma} < x \} \frac {\int _{-\infty} ^{x} e ^{- \frac {x^…

keil下载程序具体过程3:从jlink的log开始

引言 本篇文章开始&#xff0c;跟着jlink的log&#xff0c;我们将跟踪镜像文件具体的下载过程。 一、jlink的log 下面的是keil点击Download按钮输出的log。 FromELF: creating hex file... ".\Objects\Project.axf" - 0 Error(s), 0 Warning(s). Build Time Elapsed…

C++ 语言的输入与输出

C 标准 I/O 库包含 iostream、fstream 和 sstringstream。iostream、fstream 比较常用&#xff0c;一般操作于输入和输出&#xff0c;相较于前两者来说 sstringstream 的出现频率就低了许多&#xff0c;一般操作于数据的格式化。为了能更好的理解 C 语言的标准 I/O 库&#xff…

通过MATLAB自动产生Hamming编译码的verilog实现,包含testbench

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1. 原理 1.1 编码规则 1.2 错误检测和纠正 2. 实现过程 2.1 编码过程 2.2 解码过程 3. 应用领域 3.1 数字通信 3.2 存储系统 3.3 ECC内存 3.4 数据传输 5.算法完整程序工程 1.算法…

MySQL多表关联查询

目录 1. inner join&#xff1a; 2. left join&#xff1a; 3. right join&#xff1a; 4.自连接 5.交叉连接&#xff1a; 6、联合查询 7、子查询 1. inner join&#xff1a; 代表选择的是两个表的交差部分。 内连接就是表间的主键与外键相连&#xff0c;只取得键值一致…

全国各地区数字经济工具变量-文本词频统计(2002-2023年)

数据简介&#xff1a;本数据使用全国各省工作报告&#xff0c;对其中数字经济相关的词汇进行词频统计&#xff0c;从而构建数字经济相关的工具变量。凭借数字经济政策供给与数字经济发展水平的相关系数的显著性作为二者匹配程度的划分依据&#xff0c;一定程度上规避了数字经济…

Vue.js2+Cesium1.103.0 九、淹没分析效果

Vue.js2Cesium1.103.0 九、淹没分析效果 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><spanid"button"style"position: absolute; right: 50px; top: 50px; z-index: 999; font-size: 24px…

旅卦-火山旅

前言&#xff1a;人生就像一趟旅行&#xff0c;为谋生奔波也是旅&#xff0c;旅是人生的常态&#xff0c;我们看一下易经里的旅卦&#xff0c;分析下卦辞和爻辞以及自己的理解。 目录 卦辞 爻辞 总结 卦辞 旅&#xff1a;小亨&#xff0c;旅贞吉。 卦序&#xff1a;穷大者…

oracle 增加控制文件

oracle 增加控制文件 1、看control_file路径 SQL> show parameter controlNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer …

Grafana展示k8s中pod的jvm监控面板/actuator/prometheus

场景 为保障java服务正常运行&#xff0c;对服务的jvm进行监控&#xff0c;通过使用actuator组件监控jvm情况&#xff0c;使用prometheus对数据进行采集&#xff0c;并在Grafana展现。 基于k8s场景 prometheus数据收集 配置service的lable&#xff0c;便于prometheus使用labl…

大数据课程I2——Kafka的架构

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的架构&#xff1b; ⚪ 掌握Kafka的Topic与Partition&#xff1b; 一、Kafka核心概念及操作 1. producer生产者&#xff0c;可以是一个测试线程&#xff0c;也…

青大数据结构【2014】

一、单选 二、简答 为了解决顺序队列的假溢出问题,提出了循环队列,即把存储队列的表从逻辑上看成一个环 判别队列空和满有三种方法: 1)采用计数器判别,空时,计数器为0;满时,计数器为maxsize; 2)另设一个布尔变量以匹配队列的满和空; 3)少用一个元素的空间,约…

无向图邻接矩阵(C++ 代码)

#include<iostream>//无向图邻接矩阵 #define mvnum 100 using namespace std; typedef char Vertextype;//顶点数据类型 typedef int Arctype;//边权值类型 typedef struct {Vertextype vexs[mvnum];//顶点表Arctype arcs[mvnum][mvnum];//邻接矩阵int vexnum, arcnum;/…

解决macOS执行fastboot找不到设备的问题

背景 最近准备给我的备用机Redmi Note 11 5G刷个类原生的三方ROM&#xff0c;MIUI实在是用腻了。搜罗了一番&#xff0c;在XDA上找到了一个基于Pixel Experience开发的ROM&#xff1a;PixelExperience Plus for Redmi Note 11T/11S 5G/11 5G/POCO M4 Pro 5G (everpal)&#xf…

JavaScript激活严格模式

在JavaScript中&#xff0c;严格模式是一种特殊的模式&#xff0c;通过’use strict’;去激活严格模式&#xff01;在 JavaScript 中&#xff0c;“use strict” 是一种指令&#xff0c;表示在代码运行时启用严格模式&#xff0c;从而禁止使用一些不安全或者不规范的语法&#…

MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型

文章目录 CControlBar通过CToolBar类开发文字工具栏和工具箱CMainFrame.hCAppCMainFrm.cppCMainView.hCMainView.cppCEllipse.hCEllipse.cppCLine.hCLine.cppCRRect .hCRRect .cpp CControlBar class AFX_NOVTABLE CControlBar : public CWnd{DECLARE_DYNAMIC(CControlBar)pro…

【高频面试题】JVM篇

文章目录 一、JVM组成1.什么是程序计数器2.什么是Java堆&#xff1f;3.能不能介绍一下方法区(元空间&#xff09;4.你听过直接内存吗5.什么是虚拟机栈6.垃圾回收是否涉及栈内存&#xff1f;7.栈内存分配越大越好吗&#xff1f;8.方法内的局部变量是否线程安全&#xff1f;9.什么…

ntfy 实现消息订阅和通知(无需注册、无需服务器,太好了)

目录 一、下载 ntfy 的Delphi 库&#xff08;打开ntfy for Delphi 的开源库地址&#xff09; 二、创建发布消息程序 三、订阅&#xff08;接收&#xff09;消息程序 四、说明&#xff1a; 五、程序下载&#xff08;包含库&#xff09;&#xff1a; ntfy 可让你在任何电脑上通…

【muduo】关于自动增长的缓冲区

目录 为什么需要缓冲区自动增长的缓冲区buffer数据结构buffer类 写详细比较费时间&#xff0c;就简单总结下。 总结自Linux 多线程服务端编程&#xff1a;使用 muduo C 网络库 Muduo网络编程&#xff1a; IO-multiplexnon-blocking 为什么需要缓冲区 Non-blocking IO 的核心…