集成Nacos
- pom 文件
<!--添加nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
nacos 版本无需指定,跟随Spring Cloud
application.yml 配置nacos
server:
port: 9000
spring:
application:
name: xxxxx(服务名称)
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
- 启动类中添加注解
@EnableDiscoveryClient
添加注解之后,该服务就注册到nacos 中
- 服务之间的调用
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("save")
public VideoOrder save(int videoId){
VideoOrder videoOrder = new VideoOrder();
videoOrder.setVideoId(videoId);
// discovery 获取服务的实例,从而获取服务host 和 port
List<ServiceInstance> list = discoveryClient.getInstances("xdclass-video-service");
ServiceInstance serviceInstance = list.get(0);
// 通过redisTemplate 发起http 请求
// 缺点就是需要拼接字符串
Video video = restTemplate.getForObject("http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+
"/api/v1/video/find_by_id?videoId="+videoId,Video.class);
videoOrder.setVideoTitle(video.getTitle());
videoOrder.setVideoId(video.getId());
return videoOrder;
}
注册restTemplate实例
在启动类中
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
// 将resttemplate 注册到spring ioc 容器中
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
集成Open-Feign 实现负载均衡
让方法调用更加解耦
让远程调用像controller 层调用service 层一样简单
POM 文件依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类中添加注解
@EnableFeignClients
订单服务创建接口
@FeignClient(value = "xdclass-video-service")
public interface VideoService {
@GetMapping("/api/v1/video/find_by_id")
Video findById(@RequestParam("videoId") int videoId);
@PostMapping("/api/v1/video/save")
int save(@RequestBody Video video);
}
此时调用远程服务就很简单,直接通过对象方法直接访问
和Controller 层调用service 层方法一样
@Autowired
private VideoService videoService;
@RequestMapping("find_by_id")
public Object findById(int videoId){
Video video = videoService.findById(videoId);
return video;
}
负载均衡策略
默认采用 轮询负载均衡算法
OpenFeign也是默认使用了负载均衡组件Ribbon,所以我们直接设置Ribbon 的负载均衡
支持的负载均衡策略
策略选择:
1、如果每个机器配置一样,则建议不修改策略 (推荐) 2、如果部分机器配置强,则可以改为 WeightedResponseTimeRule