AlibabaCloud——nacos和open-Feign集成简单使用

集成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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值