微服务02(nacos,ribbon,feign)

服务治理

将服务注册到服务中心nacos上,每一个服务都部署到一个tomcat上,使用频繁的服务可以部署集群,每一个服务都有自己的ip+port,服务名称相同,业务相同,通过使用ribbon进行负载均衡,使用feign进行服务间的互相调用。feign中默认集成了ribbon。

1、什么是服务治理?

服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服 务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中 的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实 例的访问。
常见的注册中心
1.Erueka
2.Zookeeper
3.Consul
4.Nacos

2、Nacos:

2.1 什么是Nacos?

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
从上面的介绍就可以看出,nacos的作用就是一个注册中心,用来管理注册上来的各个微服务。

2.2 安装nacos

下载nacos
在这里插入图片描述
启动nacos
在这里插入图片描述
在这里插入图片描述
nacos启动成功,端口号8848,使用浏览器访问

http://localhost:8848/nacos

在这里插入图片描述
用户名密码都为nacos
在这里插入图片描述

2.3 使用nacos

引入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>

在application.yml配置nacos

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

在启动类上加入注解

@EnableDiscoveryClient

重新启动两个微服务发现nacos多出两个服务
在这里插入图片描述
修改代码
之前的

 Product product = restTemplate.getForObject("http://localhost:8081/product/productById/" + pId, Product.class);

修改成

    @Autowired
    private DiscoveryClient discoveryClient;
    //在方法里加入
    List<ServiceInstance> instances = discoveryClient.getInstances("shop-product");
        ServiceInstance serviceInstance = instances.get(0);
        Product product = restTemplate.getForObject(serviceInstance.getUri()+"/product/productById/" + pId, Product.class);

在这里插入图片描述

3、服务调用的负载均衡

3.1 什么是负载均衡

通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。
根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡 而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求.
我们在微服务调用关系中一般会选择客户端负载均衡,也就是在服务调用的一方来决定服务由哪个提供者执行.

3.2 基于Ribbon实现负载均衡

1.什么是Ribbon
ribbon是 Netflix 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。在SpringCloud 中, nacos一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从nacos中读 取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。 在SpringCloud中可以将注册中心和Ribbon配合使用,Ribbon自动的从注册中心中获取服务提供者的 列表信息,并基于内置的负载均衡算法,请求服务。

2.Ribbon的主要作用
(1)服务调用
基于Ribbon实现服务调用, 是通过拉取到的所有服务列表组成(服务名-请求路径的)映射关系。借助 RestTemplate 最终进行调用
(2)负载均衡
当有多个服务提供者时,Ribbon可以根据负载均衡的算法自动的选择需要调用的服务地址
Ribbon是Spring Cloud的一个组件, 它可以让我们使用一个注解就能轻松的搞定负载均衡

3.3 ribbon实现负载均衡的步骤

nacos依赖中包含riboon依赖

      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>

配置application.yml

shop-product:  # 这里写调用服务的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
     #使用的的负载均衡策略

ribbon需要依赖restTemplate,加入注解@LoadBalanced

@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

修改代码,访问服务名称,ribbon自动负载均衡

Product product = restTemplate.getForObject("http://shop-product/product/productById/" + pId, Product.class);

模拟启动多个服务
在这里插入图片描述

在这里插入图片描述
测试:
在这里插入图片描述

4、基于OpenFeign实现服务调用

4.1 什么是Feign

Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。

4.2 使用feign调用服务

服务模块引入依赖

<!--feign的jar文件 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

主类加上注解@EnableFeignClients,开启feign

@EnableFeignClients

创建一个接口,写调用的方法

@FeignClient("shop-product")
public interface ProductFeign {
    
    @GetMapping("/product/productById/{id}")
    public Product findById(@PathVariable("id") Integer pId ) ;

}

使用,注入需要使用的类中,调用其中的方法(就像在调用本地方法一样)

 @Autowired
    private ProductFeign productFeign;

注意:feign跟swagger依赖冲突,可能报空指针,将swagger2版本提到2.5.0以上就解决了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值