首页 > 其他分享 >使用 LoadBalancerClient 和 @LoadBalanced 注解需要注意的事项

使用 LoadBalancerClient 和 @LoadBalanced 注解需要注意的事项

时间:2024-09-27 11:12:21浏览次数:8  
标签:String LoadBalanced RestTemplate url LoadBalancerClient new 注解 public

使用 LoadBalancerClient 负责均衡客户端时:

情况一:

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @GetMapping("/test")
    private String test(){
        String url = "http://%s:%s/say?msg=123";
        String host = loadBalancerClient.choose("springcloud-provider").getHost();
        int port = loadBalancerClient.choose("springcloud-provider").getPort();
        url = String.format(url,host,port);
        return restTemplate.getForObject(url,String.class);
    }
}

流程:通过 LoadBalancerClient 获取 IP、端口号,补全 url 的信息,再通过 RestTemplate 发送请求,且 LoadBalancerClient 遵守 IRule 负载均衡策略。

 @Bean // 配置Ribbon负载均衡算法
    public IRule getIRule(){

        // 随机负载均衡算法
        IRule rule = new RandomRule();

//        2.权重响应时间分配规则 代替ResponseTimeRule 响应时间加权策略
//        WeightedResponseTimeRule responseTimeRule=new WeightedResponseTimeRule();
//        3.最低并发策略 分配的时候选择目前并发量最小的
//        BestAvailableRule bestAvailableRule=new BestAvailableRule();
//        4.轮训策略
//        RoundRobinRule rule=new RoundRobinRule();
//        5.重试策略 如果在配置时间内,无法选择服务,尝试选择一个服务 重试机制
//        RetryRule retryRule=new RetryRule();
//        6.区域感知策略 就近访问
//        ZoneAvoidanceRule zoneAvoidanceRule=new ZoneAvoidanceRule();
//        7.可用过滤策略 可用根据阈值进行服务过滤
//        AvailabilityFilteringRule filteringRule=new AvailabilityFilteringRule();
        return rule;
    }

情况二:给 RestTemplate 实例添加 @LoadBalanced 注解,会拦截 RestTemplate 发送的请求,并会根据请求中的 serviceId ,遵守 负载均衡策略 替换为 对应的 ip 和端口号。

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

如果请求中没有 serviceid ,这会提示:

No instances available

标签:String,LoadBalanced,RestTemplate,url,LoadBalancerClient,new,注解,public
From: https://www.cnblogs.com/lld01/p/18435305

相关文章

  • SpringMVC中注解@PathVariable的认识
    一、前言@PathVariable是SpringMVC中的一个非常重要的注解,作用在于将URL中的模板变量(即路径变量)绑定到控制器方法的参数上。这一功能特别适用于处理RESTful风格的请求,使得开发者能够直接从URL中提取参数值,并将其传递给方法进行处理。通过使用@PathVariable注解,可以设计出更加灵活......
  • SpringBoot注解大全(详细)
    1.@ActiveProfiles用来声明活动的profile–@ActiveProfiles(“prod”(这个prod定义在配置类中))@RunWith(SpringRunner.class)@SpringBootTest@ActiveProfiles("test")publicclassMyApplicationTests{@TestpublicvoidcontextLoads(){......
  • 注解的本质与工作原理
    一、注解的本质是什么?1.1注解的定义注解(Annotation)是Java5引入的一种元数据(Metadata)机制,用于在代码中添加额外的信息。注解本质上是一种特殊的接口,后续会由工具和框架在编译时、类加载时、或运行时进行处理,以实现特定的功能。1.2注解的分类注解可以分为三类:标准注解:Java......
  • 【SpringBoot】@Valid @Validated 注解校验时机实现原理
    1 前言上节我们看了【SpringBoot】@Validated@Valid参数校验概述以及使用方式,对于@Valid以及@Validated有了大概的认识,并也尝试了集中校验方式,那么本节我们重点看一下SpringBoot中@Valid@Validated的校验实现原理。2 准备工作客户类我还是用上节的那个类,然后我......
  • @Scheduled注解停止定时任务、@Scheduled设置定时任务不启用、springboot 配置Schedul
    文章目录一、关闭定时任务1.1、方法一:注释@EnableScheduling注解1.1.1、原理1.2、方法二:不加载ScheduledAnnotationBeanPostProcessor类1.3、方法三:注释@Scheduled注解1.4、方法四:设置@Scheduled注解cron时间不开启(推荐)1.4.1、原理在项目中我们可能会遇到这样一......
  • SpringBoot使用@Scheduled注解实现定时任务
    SpringBoot使用@Scheduled注解实现定时任务_springbootscheduled注解-CSDN博客 importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.scheduling.annotation.EnableSched......
  • 编程式事务和注解式事务的区别
    优缺点在SpringBoot中,事务管理有两种主要方式:声明式事务管理和编程式事务管理。这两种方式各有特点,适用于不同的场景。分别为:Transactional注解实现事务PlatformTransactionManager类实现编程式事务声明式事务管理(@Transactional)定义:通过注解的方式将事务管理与业......
  • jackson学习之五:JsonInclude注解
    本文是《jackson学习》系列第五篇,来熟悉一个常用的注解JsonInclude,该注解的仅在序列化操作时有用,用于控制方法、属性等是否应该被序列化;之所以用单独的一篇来写JsonInclude注解,是因为该注解的值有多种,每种都有不同效果,最好的学习方法就是编码实战;先对注解的所有取值做个简......
  • spring cxf 常用注解
    在Spring框架中,特别是当与ApacheCXF(一个流行的SOAP和RESTfulWeb服务框架)结合使用时,我们会遇到一系列的注解。以下是一些在Spring和CXF中常用的注解:Spring相关注解:@Component:用于定义一个bean,它会被Spring容器管理。通常与@Autowired一起使用以实现自动注入。@Service:专用于服务......
  • spring 常用注解
    Spring框架中的核心注解12@Component:用于类定义上,表明该类将被Spring容器作为组件管理。@Service:用于标注服务层的组件。@Repository:用于标注数据访问组件,即DAO组件。@Autowired:自动连接Bean之间的依赖关系。@Qualifier:指定注入Bean的名称。@Value:注入属性值。@Transactional......