【秒懂·云原生】微服务篇 —— Spring Cloud Commons:公共抽象

news2024/11/27 12:34:10

在这里插入图片描述

🔎这里是【秒懂·云原生】,关注我学习云原生不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。

👀本期介绍

主要介绍Spring Cloud Commons:公共抽象

文章目录

  • 👀专栏介绍
  • 👀本期介绍
  • 👀Spring Cloud Commons:公共抽象
    • 🪂@EnableDiscoveryClient
    • 🪂服务注册ServiceRegistry
    • 🪂RestTemplate的负载均衡
    • 🪂RestTemplate的失败重试

👀Spring Cloud Commons:公共抽象

Spring Cloud将服务发现、负载均衡和断路器等通用模型封装在一个公共抽象中,可以被所有的Spring Cloud客户端使用,不依赖于具体的实现(例如服务发现就有Eureka和Consul等不同的实现),这些公共抽象位于Spring Cloud Commons项目中。

🪂@EnableDiscoveryClient

Commons提供@EnableDiscoveryClient注释。这通过META-INF/spring.factories查找DiscoveryClient接口的实现。Discovery Client的实现将在org.springframework.cloud.client.discovery.EnableDiscoveryClient键下的spring.factories中添加一个配置类。DiscoveryClient实现的示例是Spring Cloud Netflix Eureka,Spring Cloud Consul发现和Spring Cloud Zookeeper发现。

默认情况下,DiscoveryClient的实现将使用远程发现服务器自动注册本地Spring Boot服务器。可以通过在@EnableDiscoveryClient中设置autoRegister=false来禁用此功能。

🪂服务注册ServiceRegistry

Commons现在提供了一个ServiceRegistry接口,它提供了诸如register(Registration)和deregister(Registration)之类的方法,允许您提供定制的注册服务。Registration是一个标记界面。

@Configuration
@EnableDiscoveryClient(autoRegister=false)
public class MyConfiguration {
    private ServiceRegistry registry;

    public MyConfiguration(ServiceRegistry registry) {
        this.registry = registry;
    }

    // called via some external process, such as an event or a custom actuator endpoint
    public void register() {
        Registration registration = constructRegistration();
        this.registry.register(registration);
    }
}

每个ServiceRegistry实现都有自己的Registry实现。

🪂RestTemplate的负载均衡

创建RestTemplate实例的时候,使用@LoadBalanced注解可以将RestTemplate自动配置为使用负载均衡的状态。@LoadBalanced将使用Ribbon为RestTemplate执行负载均衡策略。
创建负载均衡的RestTemplate不再能通过自动配置来创建,必须通过配置类创建,具体实例如下所示:

@Configuration
public class MyConfiguration {
@LoadBalanced
@Bean
RestTemplate restTemplate(){
return new RestTemplate():
}
}
public class MyApplication {
@Autowired
private RestTemplate restTemplate ;
public string getMyApplicationName() {
//使用restTemplate访问my-application微服务的/name接口
string name = restTemplate.getFor0bject("http://my-application/name",string.class) ;
return name;
}
}


URI需要使用服务名来指定需要访问应用服务,Ribbon客户端将通过服务名从服务发现应用处获取具体的服务地址来创建一个完整的网络地址,以实现网络调用。

🪂RestTemplate的失败重试

负载均衡的RestTemplate可以添加失败重试机制。默认情况下,失败重试机制是关闭的,启用方式是将Spring Retry添加到应用程序的类路径中。还可以设置
spring.cloud.loadbalancer.retry.enabled=false禁止类路径中Spring retry的重试逻辑。

如果想要添加一个或者多个RetryListener到重试请求中,可以创建一个类型为LoadBalancedRetryListenerFactory的Bean,用来返回将要用于重试机制的RetryListener的列表,如下代码所示:

@Configuration
public class RryListenerConfiguration {
@Bean
LoadBalancedRetryListenerFactory retryListenerFactory( {
return new LoadBalancedRetryListenerFactoryO {
@override
public RetryListener[] createRetryListeners (String service)
return new RetryListener[] {new RetryListener ( {
@Override
//重试开始前的工作
public<T,E extends Throwable> boolean open(RetryContext context,RetryCallback<TE>callback){

return true;
}
//重试结束后的工作@Override
public<T, E extends Throwable> void close(RetryContext context,RetryCallback<TE>callback,Throwable throwable){
}
//重试出错后的工作@Override
publicT,E extends Throwable> void onError(RetryContext context,RetryCal1back<TE>callback,Throwable throwable){
}
}};
}};
}}

其中,自定义配置类中定义了生成LoadBalancedRetryListenerFactory实例的@Bean方法,该工厂类的createRetryListeners方法会生成一个RetryListener实例,用于进行网络请求的重试。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/577447.html

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

相关文章

ClickHouse安装部署

—仅供学习 如有侵权 请联系删除– 一、下载 选择Tgz安装包安装 下载地址&#xff1a;Index of /clickhouse/tgz/ 选择stable目录下的安装包&#xff0c;采用21.9.4.35版本&#xff0c;分别是&#xff1a; [roothadoop08 resources]# ll 总用量 1023548 -rw-r--r--. 1 root …

JavaEE HTTP应用层协议

HTTP应用层协议 文章目录 JavaEE & HTTP应用层协议1. HTTP的报文协议格式1.1 fiddler介绍1.2 HTTP请求1.3 HTTP响应 2. HTTP请求与响应2.1 首行2.1.1 http方法2.1.2 URL2.1.3 版本号 2.2 header与空行2.2.1 Host2.2.2 Content-Type 与 Content-Length2.2.3 User-Agent&…

基于JavaWeb的事业单位公务员招考信息发布平台-考务考试报名系统

本文介绍了使用Java技术开发公务员招考信息发布平台的设计与实现过程&#xff0c;首先对实现该系统的技术进行分析&#xff0c;说明选择Java和MySQL数据库的必要性&#xff0c;然后对公务员招考信息发布平台的需求进行分析。并接着对系统进行设计&#xff0c;包括架构设计、功能…

用Python实现问卷星自动填写(超详细!!!)

用Python实现问卷星自动填写&#xff08;超详细&#xff01;&#xff01;&#xff01;&#xff09; 前言一、配置环境1.1安装依赖1.2安装驱动 二、实战处理2.1、引入库函数2.2、程序所需函数详解&#xff08;1&#xff09;自定义单选函数&#xff08;2&#xff09;自定义多选函…

基于STM32的DHT11温湿度测量

目录 1.简介 2.主要参数 3.引脚说明 4.注意事项 5.单总线协议 6.数据格式 7.工作时序 8.分模块编写程序 1.简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术&#xff0c;确保产品具有极高的可靠…

【数据分类】PNN数据分类 概率神经网络数据分类【Matlab代码#31】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 模式识别之数据分类2. 概率神经网络&#xff08;PNN&#xff09;3. 基于PNN的数据分类步骤4. 部分代码展示5. 仿真结果展示6. 资源获取说明 【可更换其他算法&#xff0c;获取资源请见文章…

web基础与HTTP服务

web基础与HTTP服务 一、web基础1、域名1.域名概述2.域名的结构3.域名注册 2、网页与HTML1.网页概述网页分类动态网页语言编程语言如下 2.HTML概述HTML 基本标签Web概述 二、HTTP服务1、HTTP版本2、HTTP请求方法3、GET 和 POST 区别4、HTTP状态码1.HTTP常见状态码 5、HTTP 请求流…

关于安卓以及微软用户chatgpt上一篇文章如今第五点无法正常进入更新解决方法以及附加本地部署

目录 一、问题出现&#xff1a; 1、问题&#xff1a; 原因&#xff1a; 二、解决办法&#xff08;本地部署chatgpt&#xff09; 1、解决&#xff08;国内网络使用真的chatgpt并非镜像&#xff09;一次部署终生使用 第一步&#xff1a; ​编辑第二步&#xff1a; 三、实现结…

S32K144开发板

目录 一&#xff0e;S32K144开发板概述 二&#xff0e;产品技术和功能规格 三&#xff0e;开发环境 1.S32K144的开发环境主流是这么三种&#xff1a; 2.开发板Demo工程 四&#xff0e;S32K144开发板实物图 五、汽车大灯硬件架构 一&#xff0e;S32K144开发板概述 S32K14…

Linux (centos)中文乱码问题解决 及说明

首先要区别3个概 &#xff1a;编码集、字符集、字体 是完全不同的东西&#xff0c;我们要解决的是字符集问题。 当一个系统初始化完毕后&#xff0c;会生成一个 /usr/lib/locale/locale-archive 文件&#xff0c;这个是字符集二进制文件&#xff0c;是系统不同语言运行的核心&…

计算机网络四 网络层

网络层的作用 网络层是计算机网络中的一个重要层次&#xff0c;它的主要作用是实现不同网络之间的通信和数据传输。网络层通过将数据分组并添加路由信息&#xff0c;使得数据可以在不同的网络之间传输。 网络层功能 异构网络互连 异构网络互连是指将不同类型的网络连接起来…

C++ 学习 ::【基础篇:07】:C++ C11 标准中 关键字 auto 的基本介绍与使用

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

redis 五种数据类型简介

redis的五种数据类型是&#xff1a;1、string&#xff08;字符串&#xff09;&#xff1b;2、hash&#xff08;哈希&#xff09;&#xff1b;3、list&#xff08;列表&#xff09;&#xff1b;4、set&#xff08;集合&#xff09;&#xff1b;5、sort set &#xff08;有序集合…

【初识 Docker | 中级篇】 Docker 安装 MySQL

文章目录 前言一、安装 docker1、安装docker2、安装docker-compose 二、mysql 单机安装1.创建mysql配置1.1.创建目录1.2.创建docker-compose.yml 2.启动mysql容器 三、mysql 主从复制安装1.主服务器容器配置1.1.修改my.cnf配置文件1.2.重启容器实例&#xff0c;创建同步用户 2.…

【 TensorFlow】URLError: <urlopen error no host given> 错误的 有效的解决方法

URLError: 错误的 有效的解决方法&#x1f60e; 前言&#x1f64c;错误运行截图&#xff1a;解决方案流程图&#xff1a;运行成功截图 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&a…

opencv_c++学习(二十六)

一、ORB特征点 ORB特征点计算步骤: Step1:选择某个像素点作为中心点P&#xff0c;其像素值为I。 Step2:设置判定FAST角点(其方法比较两个像素之间的差值)的像素阈值&#xff0c;例如 T p 20 % ∗ I p T_p 20\%*I_p Tp​20%∗Ip​ Step3:比较中心点的像素值与半径为3的圆周上…

传统加密技术(恺撒+仿射)

1.Caesar cipher恺撒密码 是一种最简单且最广为人知的加密技术。它是一种替换加密的技术&#xff0c;明文中的所有字母都在字母表上向后&#xff08;或向前&#xff09;按照一个固定数目进行偏移后被替换成密文。 加密对象&#xff1a;英文字母 密钥格式&#xff1a;k&#…

哈希表、unordered_map和unordered_set模拟

目录 哈希表 闭散列 开散列 unordered_map和unordered_set模拟 对开散列的哈希表改造 unordered_set模拟 unordered_map模拟 哈希表 哈希概念&#xff1a;通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系&#xff0c;那么在查找时通过该…

当下的程序员该如何面对复杂的就业坏境

已经2023年了&#xff0c;我们都知道现在开发趋向于年轻化&#xff0c;大部分都是90后、95后&#xff0c;毕竟&#xff0c;软件开发不像硬件开发一样&#xff0c;年限越高&#xff0c;相对来说越吃香。 31岁,前端工程师&#xff0c;工作经历8年&#xff0c;7年左右都在外包公司…

LAMP架构(Apache、Mysql、PHP服务的部署)

目录 一、LAMP架构 1.LAMP组件 二、编译安装Apache httpd服务 1.关闭防火墙&#xff0c;拉取软件包 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.优化配置文件路径 6.添加httpd系统服务 7.修改httpd 服务配置文件 8.浏览器访问验证 三、编译安装mysqld服务 1.…