栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Nacos 服务注册中心

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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.创建一个数据库

        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服务,服务的调用者和提供则都需要在其进行注册服务)

服务提供者添加依赖:
    
        org.springframework.boot
        spring-boot-starter-web
    

    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
        
	添加feign组件-->
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
 在配置文件application.yml或者(application.properties)实现服务的注册:
#配置端口号
server:
  port: 8090
spring:
  application:
    name: sca-consumer #服务注册时,服务名必须配置
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #从哪里去查找服务

之后创建启动类,启动并刷新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远程服务调用

Fegin的作用:Fegin是一种声明式Web服务客户端。底层封装了对RestTemplate技术的应用,通过Fegin可以简化服务调用方对服务提供方的调用实现。

需要在服务的调用方添加Fegin的依赖:
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

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 {
    @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.在服务提供方添加配置中心依赖:

        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

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 #是否开启更新

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号