超详细讲解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 公共抽象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 详谈Spring框架之事务管理

    详谈Spring框架之事务管理

    下面小编就为大家带来一篇详谈Spring框架之事务管理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • RocketMQ producer发送者浅析

    RocketMQ producer发送者浅析

    RocketMQ生产者是一种高性能、可靠的消息发送者,能够将消息快速、可靠地发送到RocketMQ消息队列中。它具有多种消息发送模式和消息发送方式,可以根据不同的业务需求进行灵活配置
    2023-04-04
  • Flowable流程引擎API与服务

    Flowable流程引擎API与服务

    这篇文章主要介绍了Flowable流程引擎API与服务,引擎API是与Flowable交互的最常用手段,总入口点是ProcessEngine,使用ProcessEngine,可以获得各种提供工作流或BPM方法的服务,下面我们来详细了解
    2023-10-10
  • Java实现解压zip压缩包的两种方法(支持多层级)

    Java实现解压zip压缩包的两种方法(支持多层级)

    压缩文件在生活中经常能用到,在Java中提供了压缩和解压缩文件的功能,本文主要介绍了Java实现解压zip压缩包的两种方法(支持多层级),感兴趣的可以了解一下
    2024-03-03
  • BeanDefinition基础信息讲解

    BeanDefinition基础信息讲解

    今天小编就为大家分享一篇关于BeanDefinition基础信息讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • JUC之Semaphore源码分析

    JUC之Semaphore源码分析

    这篇文章主要为大家详细分析了JUC之Semaphore源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Android中的LinearLayout布局

    Android中的LinearLayout布局

    在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,线性布局是按照垂直方向(vertical)或水平方向(horizontal)的顺序依次排序子元素,每一个子元素都位于前一个元素之后,下面我们就简单的了解一下吧
    2017-01-01
  • Spring4如何自定义@Value功能详解

    Spring4如何自定义@Value功能详解

    这篇文章主要给大家介绍了关于Spring4如何自定义@Value功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用spring4具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • java+sqlserver实现学生信息管理系统

    java+sqlserver实现学生信息管理系统

    这篇文章主要介绍了利用java和sqlserver实现学生信息管理系统,违章内容主要建立了与sqlserver数据库的连接开始展开内容,能学到了解JDBC执行SQL的语法,需要的朋友可以参考一下
    2021-12-12
  • 如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

    如何利用反射生成 MyBatisPlus中QueryWrapper动态条件

    这篇文章主要介绍了如何利用反射生成 MyBatisPlus中QueryWrapper动态条件,分享在MyBatisPlus中经常会用到代码来构造查询条件等内容,需要的小伙伴可以参考一下
    2022-02-02

最新评论