超详细讲解SpringCloud Commons公共抽象的用法

 更新时间:2022年04月21日 17:26:20   作者:桃花键神  
这篇文章主要介绍了超详细讲解SpringCloud Commons公共抽象的用法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本期主角——Spring Cloud Commons:公共抽象

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

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

到此这篇关于超详细讲解SpringCloud Commons 公共抽象的用法的文章就介绍到这了,更多相关SpringCloud 公共抽象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 基于JDBC访问MySql公共方法实例解析

    基于JDBC访问MySql公共方法实例解析

    这篇文章主要介绍了基于JDBC访问MySql公共方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • SpringBoot实现文件上传下载实时进度条功能(附源码)

    SpringBoot实现文件上传下载实时进度条功能(附源码)

    这篇文章主要为大家详细介绍了SpringBoot如何实现文件上传下载实时进度条功能,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-10-10
  • springboot中自定义异常以及定制异常界面实现过程解析

    springboot中自定义异常以及定制异常界面实现过程解析

    这篇文章主要介绍了springboot中自定义异常以及定制异常界面实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • SpringMVC中的异常处理机制详解

    SpringMVC中的异常处理机制详解

    SpringMVC提供了基于xml和基于注解的异常处理机制,一般情况下两者都要进行配置,xml异常处理机制主要用于处理xml方式产生的异常,注解异常处理机制主要用于处理基于注解方式产生的异常,这篇文章主要介绍了SpringMVC中的异常处理机制,需要的朋友可以参考下
    2024-05-05
  • Spring Boot JPA Repository之existsBy查询方法失效的解决

    Spring Boot JPA Repository之existsBy查询方法失效的解决

    这篇文章主要介绍了Spring Boot JPA Repository之existsBy查询方法失效的解决方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java实例讲解动态代理

    Java实例讲解动态代理

    动态代理指的是,代理类和目标类的关系在程序运行的时候确定的,客户通过代理类来调用目标对象的方法,是在程序运行时根据需要动态的创建目标类的代理对象。本文将通过案例详细讲解一下动态代理,需要的可以参考一下
    2022-06-06
  • Springboot实现添加本地模块依赖方式

    Springboot实现添加本地模块依赖方式

    这篇文章主要介绍了Springboot实现添加本地模块依赖方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • JAVA实现利用第三方平台发送短信验证码

    JAVA实现利用第三方平台发送短信验证码

    本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能。需要的朋友一起来看下吧
    2016-12-12
  • SpringBoot整合Shiro的方法详解

    SpringBoot整合Shiro的方法详解

    Apache Shiro是一个java安全(权限)框架,Shiro可以非常容易的开发出足够好的应用,其不仅可以用在javase环境,也可以用在javaee环境。本文介绍了SpringBoot整合Shiro的方法,需要的可以参考一下
    2022-05-05
  • 基于SpringBoot实现图片上传及图片回显

    基于SpringBoot实现图片上传及图片回显

    本篇文章主要介绍了SpringBoot如何实现图片上传及图片回显,文中通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-08-08

最新评论