SpringCloud微服务之负载均衡Ribbon

本次使用Eureka作为注册中心,向其中注册进两个相同服务名的服务(EUREKA-PROVIDER),做一个简单服务提供者集群。再注册进一个消费者调用提供者。
在这里插入图片描述
两个提供者除了application中的服务端口号不同,其他代码都相同

提供者的controller

@Controller
@RequestMapping("user")
public class UserControllerProvider {
    @Autowired
    UserService userService;
    //获取端口号
    @Value("${server.port}")
    private String port;

    @RequestMapping("testRibbon")
    @ResponseBody
    public String testRibbon(){
        return port;
    }
}

再看消费者的controller

@Controller
@RequestMapping("user")
@Slf4j
public class UserControllerComsumer {
    //使用ribbon就不能使用ip加端口访问,要用服务名
    //private static final String url="http://localhost:8001/";
    private static final String url="http://EUREKA-PROVIDER";
    @Autowired
    RestTemplate restTemplate;
    
    @RequestMapping("testRibbon")
    @ResponseBody
    public String testRibbon(){
        String object = restTemplate.getForObject("http://EUREKA-PROVIDER" + "/user/testRibbon", String.class);
        return "服务名:EUREKA-PROVIDER,"+"调用端口号:"+object;
    }
}

使用restTemplate时用服务名称代替ip+端口调用需要在注入restTemplate的时候加上@LoadBalanced注解

消费者端向容器中添加restTemplate

@EnableAutoConfiguration
@Configuration
@ComponentScan(basePackages = "com")
@EnableDiscoveryClient
@EnableEurekaClient
public class SpringCloudConsumer {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConsumer.class,args);
    }

    @Bean
    @LoadBalanced//ribbon负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

添加@LoadBalanced使用Ribbon负载均衡默认采用轮询方式

启动几个服务,浏览器测试消费者
在这里插入图片描述
此时采用的时默认的轮询方式

替换默认的策略方式

ribbon的负载均衡策略类都实现了IRule接口,
在这里插入图片描述

1、在配置文件中定义

#服务名称
EUREKA-PROVIDER:
  ribbon:
  	#采取策略
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

2、自定义类实现
在主启动无法扫描到的包下创建一个配置类
在这里插入图片描述
向容器中添加策略类

@Configuration
public class IruleConfiguration {

    @Bean
    IRule myRule(){
        return new RandomRule();
    }
}

在启动类上添加@RibbonClient
value是要进行负载均衡的服务名称,即服务提供者;configuration是自定义的配置类

@RibbonClient(name = "EUREKA-PROVIDER",configuration = com.myIRule.IruleConfiguration.class)
public class SpringCloudConsumer {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConsumer.class,args);
    }

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

总结
使用ribbon负载均衡:
服务提供者集群,即往注册中心注册多个相同服务名不同端口号的服务
在消费者端使用restTemplate进行远程调用消费者是,使用服务名称替代具体的ip+端口号

http://localhost:8001/user  -->   http://EUREKA-PROVIDER/user

在消费者注入restTemplate时加上@LoadBlance注解

	@Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值