SpringCloudAlibaba微服务架构搭建(二)Nacos组件之注册中心(粘贴即运行,纯纯干货)

 目录

前言

1、为什么叫Nacos?

2、详细学习请参考文档如下

3、同类产品对比

 4、使用Nacos充当注册中心

 4.1 Nacos服务的启动

 4.2引入Nacos注册中心依赖

 4.3 在yml文件中添加注册中心配置如下:

4.4 在启动类上添加@EnableDiscoveryClient注解启动即可注册到注册中心上

4.5 Nacos注册成功效果图

4.6增加轮询配置


前言

Nacos是阿里巴巴开发的动态服务发现和配置管理平台。它代表“命名和配置服务”,旨在简化分布式环境中微服务的管理和配置。

1、为什么叫Nacos?

Nacos:Dynamic Naming and Configuration Service,翻译为动态命名和配置服务。

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

2、详细学习请参考文档如下

官网:home

Spring Cloud阿里巴巴参考文档 :Spring Cloud Alibaba Reference Documentation

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

快速上手:Nacos 快速开始

  • 特性大图:要从功能特性,非功能特性,全面介绍我们要解的问题域的特性诉求
  • 架构大图:通过清晰架构,让您快速进入 Nacos 世界
  • 业务大图:利用当前特性可以支持的业务场景,及其最佳实践
  • 生态大图:系统梳理 Nacos 和主流技术生态的关系
  • 优势大图:展示 Nacos 核心竞争力
  • 战略大图:要从战略到战术层面讲 Nacos 的宏观优势

3、同类产品对比

对比项目\注册中心Spring Cloud NacosSpring Cloud Eureka
CAP模型支持AP和CP模型AP模型
客户端更新服务信息使用注册+DNS-f+健康检查模式。 DNS-F客户端使用监听模式push/pull拉取更新信息客户端定时轮询服务端获取其他服务ip信息并对比,相比之下服务端压力较大、延迟较大
伸缩性使用Raft选举算法性能、可用性、容错性均比较好,新加入节点无需与所有节点互相广播同步信息由于使用广播同步信息,集群超过1000台机器后对eureka集群压力很大
健康检查模式/方式支持服务端/客户端/关闭检查模式,检查方式有tcp、http、sql。支持自己构建健康检查器客户端向服务端发送http心跳
负载均衡支持支持
手动上下线服务方式通过控制台页面和API通过调用API
跨中心同步支持不支持
k8s集成支持不支持
分组Nacos可用根据业务和环境进行分组管理不支持
权重Nacos默认提供权重设置功能,调整承载流量压力不支持
厂商阿里巴巴Netflix

 4、使用Nacos充当注册中心

        4.1 Nacos服务的启动

首先我们解压下载后的zip压缩包,在windows启动进入到bin目录下点击startup.cmd启动Nacos。

linux 上启动 sh startup.sh 即可启动

 启动成功效果图如下

访问Http://127.0.0.1:8848/nacos,用户名和密码均为nacos 。登录成功效果如下

注意:一定要加上nacos ,否则路径找不到奥。

 4.2引入Nacos注册中心依赖

        <!-- SpringCloud Alibaba Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        

 4.3 在yml文件中添加注册中心配置如下:

# Tomcat
server: 
  port: 9200

# Spring
spring: 
  application:
    # 应用名称
    name: serviceName
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml

4.4 在启动类上添加@EnableDiscoveryClient注解启动即可注册到注册中心上

@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class UserCenterAuthApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(UserCenterAuthApplication.class, args);
}

@EnableDiscoveryClient 的作用都是能够让注册中心发现、并扫描到该服务。

@EnableDiscoveryClient

  • 用途:该注解用于指示Spring Boot在应用程序中启用服务发现功能。当您使用此注释时,Spring Boot 将尝试使用所选的服务注册表注册应用程序,并使其可以被同一生态系统中的其他服务发现。

  • 用法:要使用@EnableDiscoveryClient,您需要在类路径上包含 Spring Cloud 依赖项和适当的服务注册表实现。例如,如果您想使用 Eureka 进行服务发现,您应该spring-cloud-starter-netflix-eureka-client在项目中包含依赖项。

  • 兼容性: @EnableDiscoveryClient兼容各种服务发现实现,包括Eureka、Consul、Nacos等。通过使用此注释,您可以轻松地在不同的服务注册表实现之间切换,而无需更改大量代码。

@EnableDiscoveryClient2.和之间的区别@EnableEurekaClient

  • @EnableDiscoveryClient如前所述,该注解是 Spring Cloud Netflix 模块的一部分,兼容多种服务发现实现,包括 Eureka、Consul 和 Nacos。它提供了一种启用服务发现的通用方法,使您的应用程序独立于底层服务注册表。

  • @EnableEurekaClient该注解是Eureka服务注册中心特有的。它也是 Spring Cloud Netflix 模块的一部分,当您想要专门向 Eureka 服务注册表注册您的应用程序时,可以使用它。如果您使用 Eureka 作为服务注册中心,则可以使用@EnableEurekaClient来启用 Eureka 特定的功能。

总之, 和@EnableDiscoveryClient@EnableEurekaClient用于 Spring Boot 应用程序中的服务发现目的。关键区别在于,它@EnableDiscoveryClient提供了更通用的方法并可与多个服务注册表实现一起使用,而@EnableEurekaClient特定于 Eureka,只能在您使用 Eureka 作为服务注册表时使用。如果你想让你的应用程序保持灵活并且独立于服务注册中心,@EnableDiscoveryClient是首选。

注意:

从 SpringCloud Edgware 版本开始, @EnableEurekaClient 和 @EnableDiscoveryClient 注解都可以省略了,只需要在 pom.xml 中引入依赖、在application.yml 上进行相关配置,就可以将微服务注册到注册中心上。但是为了起标识作用,最好还是加上 @EnableDiscoveryClient 注解。

4.5 Nacos注册成功效果图

服务名等同于配置中application.name

4.6增加轮询配置

由于我们在开发中,经常是以服务名的方式去调用,而不是以IP+端口的方式去调用,这样我们就会不知道要找哪个服务,所以我们要开启负载均衡。代码如下

@LoadBalanced这个注解用来修饰RestTemplatebean的定义,它表明beanRestTemplate应该是负载均衡的。当您使用此注解时,Spring Cloud 将自动注入负载均衡版本的RestTemplate,允许您使用服务名称(逻辑名称)而不是硬编码的 URL。

@Retryable虽然与负载平衡没有直接关系,但该@Retryable注释可用于RestTemplate定义发出 HTTP 请求时的重试行为。如果请求由于暂时的网络问题而失败,@Retryable注释将自动重试请求一定次数。

RestTemplate当用于服务之间的通信时,这两种注释在增强分布式环境中微服务的弹性和可扩展性方面发挥着重要作用。

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

}

 4.7 服务之间调用案例 restTemplate


@RestController
@Slf4j
public class OrderController {
    //调用支付订单服务端的ip+端口号
    public static final  String PAYMENT_URL = "http://serviceName";
 
    @Autowired
    private RestTemplate restTemplate;
    //创建支付订单的接口
    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment){
        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment, CommonResult.class);
    }
    //获取id获取支付订单
    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {
        return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
 
    }
}

FeignClient方式调用,稍后详解

@FeignClient(contextId = "feignTestService",value = "cloud-consumer-service",fallbackFactory = FeignTestFallbackFactory.class)
public interface FeignTestService {
 
    
    @PostMapping("/test/feignTest")
    void feignTest();
 
}

本次SpringCloudAlibaba之注册中心Nacos就到这里,有问题欢迎留言。感谢评论收藏加关注!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值