Nacos 服务注册中心

Nacos概述:

                Nacos是一个用于服务注册与发现,配置管理的平台。是阿里巴巴基于spring-cloud创造,此组件不仅提供了注册中心,还具备配置中心的功能。

官方教程网址:https://nacos.io/zh-cn/docs/quick-start.html

下载网址:Releases · alibaba/nacos · GitHub

当我们使用Nacos时需要进行相关的配置:

        确保电脑的JAVA_HOME环境变量。确保MySQL版本在5.7以上 或者MariaDB10.5以上。

Nacos链接数据库:

        1.创建一个数据库

初始化配置:打开操作系统命令行,登陆mysql 然后执行如下指令:

 

 通过上面的网址下载获取sql。并执行到数据库中

source d:/nacos-mysql.sql 

 成功后会创建一个nacos_config数据库,打开数据库会看到一些表,例如:

        2.在/nacos/conf/application.properties里打开默认配置,并基于你当前环境配置要链接的数据库。切连接的数据库必须能对上。

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

Nacos服务启动与访问:

Nacos端口号默认是:8848

        通过nacos的bin目录通过指令进行启动:

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

./startup.sh -m standalone

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

startup.cmd -m standalone

Idea添加 Nacos

默认账号密码都是nacos/nacos

Idea中进行配置注册NacosServe(server指web服务,服务的调用者和提供则都需要在其进行注册服务)

服务提供者添加依赖:

<!--    基础springboot 工程的web服务依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
<!--    基于alibaba的nacos实现服务注册管理,当添加了此依赖后,系统启动时 会向nacos
        服务发送一些心跳包,进行服务注册 一般5秒会发送一次。服务的注册和发现-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>    
	添加feign组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
<!--        添加nacos配置中心依赖,此依赖添加后,项目会从nacos获取配置信息-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

 在配置文件application.yml或者(application.properties)实现服务的注册:

#配置端口号
server:
  port: 8090

#管理数据源
spring:
  application:   #链接--------nacos
    name: sso-springbootCS  #服务注册时,服务名必须配置
  cloud:
    nacos:
      discovery:
        server-addr: http://192.168.232.126:8848   # nacos注册中心地址  从哪里去查找服务
      config:
        server-addr: http://192.168.232.126:8848   # nacos配置中心地址
        group: DEV_GROUP   # 指定分组名
        file-extension: yml  # 指定yaml格式的文件配置
        #namespace: # 命名空间
        enabled: false   #关闭报错

之后创建启动类,启动并刷新nacos。检测服务是否注册成功:

 远端服务之间的调用:

通过spring中的RestTemplate对象进行调用。

1.在配置启动类的下面进行定义一个@Bean 得到RestTemplate对象。

    @Bean  //提交给容器进行管理
    @LoadBalanced //通过这个注解描述对象。底层会调用一个拦截器并进行负载均衡的算法
    public RestTemplate restTemplate01(){
        return new RestTemplate();
    }

2.在业务层进行注入,并进行调用服务。得到服务提供方的地址URL 及 类型

返回调用服务的地址和类型就可以得到对应的服务

 @Autowired
    private RestTemplate restTemplate01;

    @Value("${spring.application.name:sca-consumer}")
    String appname1;//获得执行的服务对象的名字

    @GetMapping("/consumer")
    public String doConsumer01(){
                //通过骨架给其赋值    会自动拦截 并且根据要进行调用的服务的名字匹配端口号和id
        String url = String.format("http://sca-provider/provider/echo/%S",appname1);
        return restTemplate01.getForObject(url, String.class);
    }

服务器负载均衡设计及实现

使用@LoadBalanced底层就会自动拦截增强,使用负载均衡算法。

当我们使用此注解描述ResrTemplate对象时,系统底层会基于对象使用拦截器进行拦截,然后进行功能增强,拦截器(Interceptor),其增强是基于LoadBalancerClient对象进行服务实例获取,而这个服务实例获取的过程,底层会采用负载均衡。

负载均衡的七种策略:

基于Irule 得到其中的方法。

默认的是轮训策略  可以在yml文件种进行配置所要的负载均衡的策略。

负载均衡的算法配置:

#sca-provider服务负载均衡配置 赋予服务提供方策略
sca-provider:
  ribbon: #负载均衡组件,是ribbon组件提供了Irule接口及相关实现
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

Feign远程服务调用

Feign的作用:Fegin是一种声明式Web服务客户端。底层封装了对RestTemplate技术的应用,通过Feign可以简化服务调用方对服务提供方的调用实现。Feign默认已经启用负载均衡和重试。

Feign集成Ribbon:

Ribbon提供负载均衡和重试的功能

Ribbon的重试:

调用后台服务失败(异常,宕机,超时)可以自动发起重试调用

·ribbon.MaxAutoRetries

单台服务器的重试次数

·ribbon.MaxAutoRetriesNextServer

更换服务器的次数

·ribbon.ReadTimeout

超时时间,默认1000

·riboon.ConnectTimeout

与后台服务器简历连接的超时时间,默认1000

·ribbon.OkToRetryOnAllOperations

是否对所有类型请求都重试,默认只对Get请求重试

需要在服务的调用方添加Fegin的依赖:

<!--        添加feign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

1.在服务的调用方添加表示启用Fegin的注解:

@EnableFeginClients

//进行配置启动类
@SpringBootApplication
@EnableFeignClients//用于描述一种配置类。
// 告诉系统底层 启动@FeignClient注解描述的接口创建实现类及对象然后交给Spring管理
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);


    }

2.定义一个接口,并使用注解@FeignClient,在注解中输入服务提供方的名字,并在其中指定一个contextId作为远程调用服务的唯一标识。且定义的路径必须与要调用的服务路径一致

//value指向要调用的服务的名字。contextId指远程服务调用的唯一标识
@FeignClient(value = "sca-provider",contextId = "remoteProviderService1")
public interface RemoteProviderService1 {

    @GetMapping("/provider/echo/{string}")
    String xxoo(@PathVariable("string") String string);
                        //将定义的参数与Restful进行绑定
}

在业务层进行调用

  @Autowired
    private RemoteProviderService1 remoteProviderService1;

    @GetMapping("/consumer/look/{string}")
    public String look(@PathVariable String string){

        return remoteProviderService1.xxoo(string);
    }

3.当在进行远程服务调用时,假如调用的服务突然不可用,或者过程超时时。我们就需要给服务消费端一个具体的容错方案,在Feign应用中通过FallbackFactory接口的实现类进行默认的相关处理。

3.1

在配置yml文件中进行配置熔断机制

feign:
  hystrix:
    enabled: true  #打开熔断机制,如果调用不到启动备选方案
//基于此对象处理接口调用时出现的服务中断,超时等问题
public class Remote11 implements FallbackFactory<RemoteProviderService1> {
    @Override
    public RemoteProviderService1 create(Throwable throwable) {

            //会在出现异常后进行执行
        return new RemoteProviderService1() {
            @Override
            public String xxoo(String string) {
                return "服务超时,请重新";
            }
        };
    }
}

3.2在接口中进行指定

//value指向要调用的服务的名字。contextId指远程服务调用的唯一标识
@FeignClient(value = "sca-provider",contextId = "remoteProviderService1",
fallbackFactory = Remote11.class)//当访问出现异常时会执行此字节码对象

Nacos配置中心:存储项目配置信息的一个服务

为什么要使用配置中心:集中管理配置信息,动态发布配置信息

常见的配置中心例如:(nacos,Apollo...)

配置中的功能:最基础的功能就是存储用户发布的配置,进阶的功能就是当某个配置发生变更时,不需要停机就可以动态刷新服务内部的配置项。

配置中心一般配置什么内容:连接池,日志,线程池,限流熔断规则

@slf4j 注解 添加此注解就可以直接使用日志功能

1.在服务提供方添加配置中心依赖:

<!--        添加nacos配置中心依赖,此依赖添加后,项目会从nacos获取配置信息-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.将提供服务方的application.yml的名字改成    bootstarp.yml(启动优先级最高),并添加配置中心配置:

spring:
  application:
    name: sca-consumer #服务注册时,服务名必须配置
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #从哪里去查找服务
      config:
        server-addr: localhost:8848
        file-extension: yml
        namespace: 671607e0-4a02-4457-b4c1-b29069814309 #指定的配置管理路径名

配置更新注解@RefreshScope 当配置中心发生变化时,能够及时看到类中属性值的更新。

在服务提供方进行添加

@RefreshScope  //当配置中心进行变化时,能够及时看到类中属性值的更新
@RestController
public class ProviderLogController{
  //.....
}

Nacos配置管理模式:在yml中进行的配置

Namespace:命名空间 

Group: 分组 

Service/Datald: 指定某一个  一般对应一个配置文件

   namespace: 671607e0-4a02-4457-b4c1-b29069814309 #指定的配置中心名
       group: DEFAULT_GROUP_51
       

共享配置设计及读取:

当namespace的多个配置文件都有相同配置时,就可以进行提取,然后存储到nacos配置中心的一个或多个指定配置文件,哪个需要就直接读取即可。

创建一个配置文件:共享配置名字不需要一致

在yml中进行共享配置

        namespace: 671607e0-4a02-4457-b4c1-b29069814309 #指定的配置中心名
       #group: DEFAULT_GROUP_51
        shared-configs[0]:   
                data-id: xxx.yml  # 执行目标配置
                refresh: true #是否开启更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值