SpringCloud-Nacos的搭建使用

项目地址请到gitee下载查看https://gitee.com/xwb1056481167/spring-cloud

Nacos(Dynamic Naming and Config Service)

主要功能:

服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。

消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。

阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

Nacos=Eureka+Config+Bus

nacos的安装

下载地址: https://github.com/alibaba/nacos/releases
1.1.4的下载地址
https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz

在浏览器中输入以下地址

http://localhost:8848/nacos //用户名密码nacos/nacos

项目集成Nacos

新建cloudalibaba-provider-payment9001,cloudalibaba-provider-payment9002,以下创建9001,9002和9001下同。

首先在总项目spring-cloud集成jar(或者直接提供者中指定版本号即可)

<!-- SpringCloud alibaba -->
<dependencyManagement>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencyManagement>

一、新建服务提供者cloudalibaba-provider-payment9001,9002

1、pom.xml

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

2、yml配置

server:
  port: 9001
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
management:
  endpoints:
    web:
      exposure:
        include:  '*'

3、主启动类

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

4、controller

@RestController
public class PaymentController {
    @Value("\${server.port}")
    private String serverPort;
    @GetMapping(value = "/payment/nacos/{id}")
    public String getPaymentById(@PathVariable("id") Long id) {
        return "nacos registry ,serverPort: +" + serverPort + "\\t id " + id;
    }
}

完成9001的搭建,9002上同(此处省略)。

二、新建服务消费者cloudalibaba-consumer-nacos-order83

1、pom.xml

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

2、yml

server:
  port: 83
spring:
  application:
    name: nacos-payment-comsumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
management:
  endpoints:
    web:
      exposure:
        include:  '*'
#消费者将要去访问的微服务名称,(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider

3、主启动类

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

4、restTemplate和Controller

//restTemplate类
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}
//controller
@RestController
@Slf4j
public class OrderNacosController {
    @Resource
    private RestTemplate restTemplate;
    @Value("\${service-url.nacos-user-service}")
    private String nacosUserService;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id) {
        return restTemplate.getForObject(nacosUserService + "/payment/nacos/" + id, String.class);
    }
}

测试结果(刷新,9001,9002轮询访问)

注册中心对比

nacos支持AP和CP
如何切换

curl -X PUT '\$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

服务注册与发现Eureka、Zookeeper、Consul 三个注册中心的异同点(CAP理论)

CAP理论简介

CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分区容错性(Partition tolerance)

一致性(Consistency): 在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。

可用性(Availability): 一直可以正常的做读写操作。简单而言就是客户端一直可以正常访问并得到系统的正常响应。用户角度来看就是不会出现系统操作失败或者访问超时等问题。

分区容错性(Partition tolerance): 指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。 事实上我们在设计分布式系统是都会考虑到bug,硬件,网络等各种原因造成的故障,所以即使部分节点或者网络出现故障,我们要求整个系统还是要继续使用的 (不继续使用,相当于只有一个分区,那么也就没有后续的一致性和可用性了)

而最多同时较好地满足两个条件(原因请参考:https://www.cnblogs.com/zhuyeshen/p/11720655.html)。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性、可用性和分区容错性这三个需求,因此,根据CAP原理将NoSQL数据库分成了满足CA、CP、AP 原则 三大类:

CA

单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

CP

满足一致性,分区容错的系统,通常性能不是特别高。

AP

满足可用性,分区容错性的系统,通常可能对一致性要求低一些。

组件名 语言 CAP 服务监控检查 对外暴露接口 SpringCloud集成
eureka java AP 可配支持 http 已集成
consul go CP 支持 http:DNS 已集成
zookeeper java CP 支持 客户端 已集成

猜你喜欢

转载自blog.csdn.net/www1056481167/article/details/113612177