微服务中的负载均衡简单实现
时间:2022-07-26
本文章向大家介绍微服务中的负载均衡简单实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、使用 RestTemplate 实现
在消费者微服务中,首先导入 RestTemplate
并设置该类。
使用 @LoadBalanced
注解赋予 RestTemplate
负载均衡的能力。
@Configuration
public class ApplicationContextConfig {
/**
* LoadBalanced 赋予负载均衡的能力
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
然后在控制器中指明要访问的微服务名字,例如这里是 CLOUD-PAYMENT-SERVICE
。
@RestController
@Slf4j
public class OrderController {
private static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create")
public CommonResult create(Payment payment) {
return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
}
@GetMapping("/consumer/payment/get/{id}")
public CommonResult getPayment(@PathVariable("id") Long id) {
return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
}
}
这样就能实现负载均衡了,因为引入 spring-cloud-starter-netflix-eureka-client
的时候就已经引入了 ribbon
了。
二、使用 OpenFeign 实现
首先我们需要在微服务项目的主启动类上加一个 @EnableFeignClients
注解,此时不用加 EnableEurekaClient
注解了:
@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderFeignMain80.class, args);
}
}
然后定义一个接口 OrderFeignService
,用于向服务的提供方发送请求,使用 @FeignClient("CLOUD-PAYMENT-SERVICE")
注解指定微服务名称。
@Component
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface OrderFeignService {
/**
* 完成 Feign 包装的调用
* @param id
* @return
*/
@GetMapping("/payment/get/{id}")
CommonResult getPayment(@PathVariable("id") Long id);
}
然后在控制器中向外界暴露一个接口即可。
@RestController
@Slf4j
public class OrderFeignController {
@Resource
private OrderFeignService orderFeignService;
@GetMapping("/consumer/payment/get/{id}")
public CommonResult getPayment(@PathVariable("id") Long id) {
return orderFeignService.getPayment(id);
}
}
- 实操 Web Cache
- 怎样制作RPM包
- 框架设计原则和规范(完)
- 这或许是对小白最友好的python入门了吧——9,数字深入体验
- WebAPI返回数据类型解惑 以及怎样解决Extjs无法解析返回的xml
- 图像处理:利用神经网络生成新图像和修复旧图像
- 这或许是对小白最友好的python入门了吧——8,初识for语句
- Extjs 项目中常用的小技巧,也许你用得着(3)
- 对于Ext.data.Store 介紹 与总结,以及对以前代码的重构与优化
- 数据库与图片完美解决方案
- 数据库进程间通信解决方案
- 【实践操作】在iPhone上创建你的第一个机器学习模型
- WP8微信5.3开始内测 支持Cortana语音 两微破冰了?
- 数据库进程间通信解决方案之MQ
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法