【项目创建流程】注册中心和服务调用和配置中心

本文详细介绍了如何使用Nacos作为注册中心,包括Nacos的特点、下载安装和启动,以及服务的注册。同时,文章讲解了OpenFeign的服务调用,包括其引入、使用、负载均衡、超时控制和日志配置。此外,还提到了Nacos配置中心的使用以及一些其他细节,如命名空间和配置集。
摘要由CSDN通过智能技术生成

【项目创建流程】Nacos注册中心和服务调用和配置中心

Nacos注册中心

1、常见注册中心

  • Eureka:Eureka是Spring Cloud Netflix中的重要组件,主要作用就是做服务注册和发现。2.0遇到性能瓶颈,停止维护,现在已经闭源。

  • Consul:Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。

  • Zookeeper:zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目。

  • Nacos(Spring Cloud Alibaba)

    • Alibaba针对Spring Cloud体系的注册中心
    • 相对于 Spring Cloud Eureka 来说,Nacos 更强大
    • Nacos = Spring Cloud Eureka + Spring Cloud Config + Spring Cloud Bus

2、为什么叫Nacos

  • 前四个字母分别为 Naming 和 Configuration 的前两个字母,最后的s为Service

    • Dynamic Naming and Configuration Service
  • Nacos就是:注册中心 + 配置中心的组合

    • Spring Cloud Alibaba Nacos = SpringCloudEureka + SpringCloudConfig +SpringCloudBus

3、Nacos下载和安装

下载地址:https://github.com/alibaba/nacos/releases

下载版本:nacos-server-1.1.4.zip 或 nacos-server-1.1.4.tar.gz,解压任意目录即可

4、启动Nacos

- Windows

启动:双击bin/startup.cmd运行文件

访问:http://localhost:8848/nacos

用户名密码:nacos/nacos

- Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式)

启动命令:sh startup.sh -m standalone

服务注册

1、引入依赖

service模块中配置Nacos客户端的pom依赖

<!--服务注册-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、添加服务配置信息

配置application.properties,在客户端微服务中添加注册Nacos服务的配置信息

#spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址

接下来要起一个名字,这样才能知道这个服务在配置中心叫什么

#spring:
  application:
    name: gulimall-coupon

3、添加Nacos客户端注解

在客户端微服务启动类中添加注解

@EnableDiscoveryClient   //开启服务注册发现,这个注解可加可不加

4、启动客户端微服务

启动注册中心,启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务

image-20200723155043496

基于OpenFeign的服务调用

一、OpenFeign是什么

说起这个,还得先知道Feign是什么,Feign是一个声明式的Http客户端,它的目的就是让远程调用更加简单,Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数,格式,地址等信息

OpenFeign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。

Nacos很好的兼容了OpenFeign, OpenFeign默认集成了 Ribbon, 所以在Nacos下使用OpenFeign默认就实现了负载均衡的效果。

二、OpenFeign的引入

1、引入依赖

service模块中配置OpenFeign的pom依赖(实际是在服务消费者端需要OpenFeign的依赖)

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、启动类添加注解

在消费者service_edu的启动类添加如下注解

@EnableFeignClients
或者
@EnableFeignClients(basePackages = "cn.jimu98.gulimall.member.feign")

三、OpenFeign的使用

1、oss微服务中创建测试api

服务的生产者的FileController中添加如下方法:

@ApiOperation(value = "测试")
@GetMapping("test")
public R test() {
    log.info("oss test被调用");
    return R.ok();
}
2、edu微服务中创建远程调用接口

服务消费者中创建feign包,创建如下接口:

该接口首先写上注解

@FeignClient(“service-oss”) 表示调用哪个微服务

然后里面写上具体的方法(该方法去直接复制生产者Controller复制即可,但是要注意全地址,包括类注解地址)

package com.atguigu.guli.service.edu.feign;

@Service
@FeignClient("service-oss")
public interface OssFileService {

    @GetMapping("/admin/oss/file/test")
    R test();
}
3、调用远程方法

服务消费者中的TeacherController中添加如下方法:

@Autowired
private OssFileService ossFileService;

@ApiOperation("测试服务调用")
@GetMapping("test")
public R test(){
    ossFileService.test();
    return R.ok();
}

四、负载均衡

Ribbon的负载均衡策略
策略名策略描述
BestAvailableRule选择一个最小的并发请求的server
AvailabilityFilteringRule过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(activeconnections 超过配置的阈值)
WeightedResponseTimeRule根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。
RetryRule对选定的负载均衡策略机上重试机制。
RoundRobinRule轮询选择server
RandomRule随机选择一个server
ZoneAvoidanceRule综合判断server所在区域的性能和server的可用性选择server

配置负载均衡策略的方式:

service-product: # 调用的提供者的名称 
  ribbon: 
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

五、OpenFeign的超时控制

1、模拟长流程业务

修改oss服务FileController的test方法,添加sleep 3秒:

@ApiOperation(value = "测试")
@GetMapping("test")
public R test() {
    log.info("oss test被调用");
    try {
        TimeUnit.SECONDS.sleep(3);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return R.ok();
}
2、远程调用测试

上面的程序在测试时会出现远程调用超时错误。如下:因为OpenFeign默认等待1秒钟,否则超时报错

重试规则:每隔一秒发起重试

ribbon:
  MaxAutoRetries: 0 # 同一实例最大重试次数,不包括首次调用,默认0
  MaxAutoRetriesNextServer: 1 # 重试其他实例的最大重试次数,不包括首次所选的server,默认1
3、解决

application.yml文件中配置ribbon的超时时间(因为OpenFeing的底层即是对ribbon的封装)

ribbon:
  ConnectTimeout: 10000 #连接建立的超时时长,默认1秒
  ReadTimeout: 10000 #处理请求的超时时间,默认为1秒

六、OpenFeign日志

1、作用

OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解OpenFeign中Http请求的细节。即对OpenFeign远程接口调用的情况进行监控和日志输出。

2、日志级别
  • NONE:默认级别,不显示日志
  • BASIC:仅记录请求方法、URL、响应状态及执行时间
  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应头信息
  • FULL:除了HEADERS中定义的信息之外,还有请求和响应正文及元数据信息
3、配置日志bean

在service_edu中创建配置文件

package com.atguigu.guli.service.edu.config;

@Configuration
public class OpenFeignConfig {

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}
4、开启日志

在service_edu中,application.yml中指定监控的接口,以及日志级别

logging:
  level:
    com.atguigu.guli.service.edu.feign.OssFileService: debug #以什么级别监控哪个接口

Nacos配置中心

首先导入依赖

<!--配置中心来做配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

新建bootstrap.yml 配置文件中配置Nacos Config元数据

你既然要获取配置,那说明你上来根本没有配置,所以你得创建一个优先级更高的配置

来指定配置中心的地址

然后动态获取配置文件

spring:
  application:
    name: service-sms
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos中心地址
        file-extension: yaml # 配置文件格式,如果是properties文件则不用配置此项

测试

@Value("${user.name1}")
private String name;
@Value("${user.age}")
private String age;
@RequestMapping("test")
public R test() {
    return R.ok().put("name", name+" ...").put("age", age);
}

其他细节

命名空间

public(保留空间)默认新增的所有配置都在public空间

开发,测试,生产:可能有不同的配置,这时候就可以创建不同的命名空间

你可以创建不同的命名空间,然后创建配置的时候选择不同的命名空间

然后修改bootstrap文件,spring.cloud.nacos.config.namespace=xxxx;(id编号)

配置集

所有配置的集合

配置集ID:类似文件名

​ Data ID:

使用spring.cloud.nacos.config.group=1111 //切换不同的组

加载多个配置集

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml

spring.cloud.nacos.config.ext-config[0].group=dev

spring.cloud.nacos.config.ext-config[0].refresh=true //配置是否自动刷新

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml

spring.cloud.nacos.config.ext-config[1].group=dev

spring.cloud.nacos.config.ext-config[1].refresh=true //配置是否自动刷新

spring.cloud.nacos.config.ext-config[2].data-id=other.yml

spring.cloud.nacos.config.ext-config[2].group=dev

spring.cloud.nacos.config.ext-config[2].refresh=true //配置是否自动刷新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值