微服务中的负载均衡简单实现

缺乏、安全感 2022-12-11 01:24 249阅读 0赞

一、使用 RestTemplate 实现

在消费者微服务中,首先导入 RestTemplate 并设置该类。

使用 @LoadBalanced 注解赋予 RestTemplate 负载均衡的能力。

  1. @Configuration
  2. public class ApplicationContextConfig {
  3. /** * LoadBalanced 赋予负载均衡的能力 */
  4. @Bean
  5. @LoadBalanced
  6. public RestTemplate getRestTemplate() {
  7. return new RestTemplate();
  8. }
  9. }

然后在控制器中指明要访问的微服务名字,例如这里是 CLOUD-PAYMENT-SERVICE

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center

  1. @RestController
  2. @Slf4j
  3. public class OrderController {
  4. private static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
  5. @Resource
  6. private RestTemplate restTemplate;
  7. @GetMapping("/consumer/payment/create")
  8. public CommonResult create(Payment payment) {
  9. return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
  10. }
  11. @GetMapping("/consumer/payment/get/{id}")
  12. public CommonResult getPayment(@PathVariable("id") Long id) {
  13. return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
  14. }
  15. }

这样就能实现负载均衡了,因为引入 spring-cloud-starter-netflix-eureka-client 的时候就已经引入了 ribbon 了。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 1

二、使用 OpenFeign 实现

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 2
首先我们需要在微服务项目的主启动类上加一个 @EnableFeignClients 注解,此时不用加 EnableEurekaClient 注解了:

  1. @SpringBootApplication
  2. @EnableFeignClients
  3. public class OrderFeignMain80 {
  4. public static void main(String[] args) {
  5. SpringApplication.run(OrderFeignMain80.class, args);
  6. }
  7. }

然后定义一个接口 OrderFeignService,用于向服务的提供方发送请求,使用 @FeignClient("CLOUD-PAYMENT-SERVICE") 注解指定微服务名称。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MTM2NA_size_16_color_FFFFFF_t_70_pic_center 3

  1. @Component
  2. @FeignClient("CLOUD-PAYMENT-SERVICE")
  3. public interface OrderFeignService {
  4. /** * 完成 Feign 包装的调用 * @param id * @return */
  5. @GetMapping("/payment/get/{id}")
  6. CommonResult getPayment(@PathVariable("id") Long id);
  7. }

然后在控制器中向外界暴露一个接口即可。

  1. @RestController
  2. @Slf4j
  3. public class OrderFeignController {
  4. @Resource
  5. private OrderFeignService orderFeignService;
  6. @GetMapping("/consumer/payment/get/{id}")
  7. public CommonResult getPayment(@PathVariable("id") Long id) {
  8. return orderFeignService.getPayment(id);
  9. }
  10. }

发表评论

表情:
评论列表 (有 0 条评论,249人围观)

还没有评论,来说两句吧...

相关阅读

    相关 关于服务负载均衡

    1.什么是负载均衡 在高并发的访问下,单一服务器性能不足以满足正常需求,我们往往会引入分布式集群服务器来提高服务质量,提高网站整体性能。那么,这时一个请求到这个服务,就需

    相关 .Net服务负载均衡2

    ![8c552560cf634148acba03c0eaad0ad4.webp][] API网关层是微服务架构中的一个重要组成部分。它是一个软件,可以作为反向代理,将客户端的