Nacos注册中心配置

在了解Nacos注册配置中心之前,先了解一下Spring Cloud的相关基础组件有那些

  1. 服务发现——Netflix Eureka  (Nacos)
  2. 服务调用——Netflix Feign 
  3. 熔断器——Netflix Hystrix 
  4. 服务网关——Spring Cloud  GateWay 
  5. 分布式配置——Spring Cloud Config  (Nacos)
  6. 消息总线 —— Spring Cloud Bus (Nacos)

 

相关介绍

  1. Eureka:个服务启动时,Eureka会将服务注册到EurekaService,并且EurakeClient还可以返回过来从EurekaService拉去注册表,从而知道服务在哪里
  2. Ribbon:服务间发起请求的时候,基于Ribbon服务做到负载均衡,从一个服务的对台机器中选择一台
  3. Feign:基于fegin的动态代理机制,根据注解和选择机器,拼接Url地址,发起请求
  4. Hystrix:发起的请求是通过Hystrix的线程池来走,不同的服走不同的线程池,实现了不同的服务调度隔离,避免服务雪崩的问题
  5. Zuul/GateWay :如果前端后端移动端调用后台系统,统一走zull网关进入,有zull网关转发请求给对应的服务

 

一:nacso

1:基本概念

(1)英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心作者Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

(2)常见的注册中心:

1. Eureka(原生)

2. Zookeeper(支持,专业的独立产品。例如:dubbo)

3. Consul(原生,GO语言开发)

4. Nacos

相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config

- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

二、Nacos原理

1Nacos地图

Nacos注册中心配置_第1张图片

1Nacos结构图

Nacos注册中心配置_第2张图片

(1)nacos介绍

Nacos注册中心配置_第3张图片

(2)nacos服务领域模型

Nacos注册中心配置_第4张图片

(3)Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。

Nacos主要提供以下四大功能:

1. 服务发现和服务健康监测

2. 动态配置服务

3. 动态DNS服务

4. 服务及其元数据管理

Nacos注册中心配置_第5张图片

 

(4)注册中心原理

服务注册方法:以Java nacos client v1.0.1 为例子,服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。

Nacos注册中心配置_第6张图片

(5) 配置中心原理

Nacos注册中心配置_第7张图片

三、Nacos下载和安装

(1)下载地址和版本

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

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

(2)启动nacos服务

- Linux/Unix/Mac

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

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

- Windows

启动命令:cmd startup.cmd 或者双击startup.cmd运行文件。

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

用户名密码:nacos/nacos

Nacos注册中心配置_第8张图片

二、服务注册

1:配置Nacos客户端的pom依赖





    

        

        

            org.springframework.cloud

            spring-cloud-dependencies

            Hoxton.RELEASE

            pom

            import

        

 






    org.springframework.cloud

    spring-cloud-starter-netflix-ribbon







    org.springframework.cloud

    spring-cloud-starter-netflix-hystrix





 

     org.springframework.cloud

     spring-cloud-starter-alibaba-nacos-discovery

 



 

     org.springframework.cloud

     spring-cloud-starter-openfeign

 

2、添加服务配置信息

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

# 服务名(同时为nacos注册的服务名称)

spring.application.name=service-edu

#springcloud的Nacos 注册中心配置

#Nacos服务地址(本地服务是:127.0.0.1)(部署后需要换成部署的服务器地址)

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

3、添加Nacos客户端注解

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

@EnableDiscoveryClient

4、启动客户端微服务

1:启动注册中心

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

Nacos注册中心配置_第9张图片

 

二、服务调用

1、在调用端的启动类添加注解

@EnableFeignClients

2、创建包和接口

创建client包

@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。

@GetMapping注解用于对被调用的微服务进行地址映射。

@PathVariable注解一定要指定参数名称,否则出错

@Component注解防止,在其他位置注入CodClient时idea报错

@Component

@FeignClient(name = "service-order")//@FeignClient(name = "服务名称")

public interface OrderClient {

    //服务接口的全路径名称,使用@PathVariable需要注明参数名称,如:@PathVariable("courseId") String courseId

    @GetMapping("/eduorder/order/isBuyCourse/{courseId}/{memberId}")

    public boolean isBuyCourse(@PathVariable("courseId") String courseId, @PathVariable("memberId") String memberId);

}

3、调用微服务

@Autowired

private FeignToUcenterClient feignToUcenterClient;


@ApiOperation(value = "添加评论")

@PostMapping("addComment")

public R addComment(@RequestBody Comment comment, HttpServletRequest request) {

    String memberId = JwtUtils.getMemberIdByJwtToken(request);//解析token字符串中的信息,获取id

    if(StringUtils.isEmpty(memberId)) {//如果没有值,让用户先登录

        return R.error().code(28004).message("请登录");

    }

    comment.setMemberId(memberId);//将用户id添加

    UcenterMember ucenterMember = feignToUcenterClient.selectById(memberId);//调用feign接口,远程调用根据id获取用户信息

    //将用户昵称和头像添加

    comment.setNickname(ucenterMember.getNickname());

    comment.setAvatar(ucenterMember.getAvatar());

    commentService.save(comment);//执行添加操作

return R.ok();

相关连接

https://www.jianshu.com/p/39ade28c150d

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

你可能感兴趣的:(Java)