springcloud新注册中心nacos
Spring Cloud Alibaba介绍
2018 年 10 月 31 日的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统
主要功能包括:
服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道
组件 | ----- |
---|---|
Sentinel: | 把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 |
Nacos: | 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 |
RocketMQ: | 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务 |
Dubbo: | Apache Dubbo 是一款高性能 Java RPC 框架 |
Seata: | 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案 |
Alibaba Cloud ACM: | 一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品 |
Alibaba Cloud OSS: | 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据 |
Alibaba Cloud SchedulerX: | 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务 |
Alibaba Cloud SMS: | 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道 |
图解
启动nacos服务
前提:配置JAVA_HOME环境变量,不配置会导致无法运行Nacos
下载源码或者安装包
安装包地址:https://github.com/alibaba/nacos/releases
解压后进入nacos/bin目录
控制台启动下,看到"Nacos started successfully in stand alone mode.”后表示服务已启动
nacos默认使用8848端口,可通过http://127.0.0.1:8848/nacos/index.html进入自带的控制台界面,默认用户名/密码是nacos/nacos
入门案例
创建工程
父工程:springcloud1 通用模块(M)
服务提供者(C):provider
服务消费者(C):consumer
创建父模块
父工程是一个maven项目,一般创建方式即可,父工程的主要用途是锁定pom依赖包版本。由于springcloud2X停止更新,这里我们采用稳定的低版本,配套的springboot版本为1x版本。
pom.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- springboot版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 三坐标 -->
<groupId>com.liuchunming</groupId>
<artifactId>springcloud1</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 工程名称和描述 -->
<name>springcloud1</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!-- 打包方式 pom表示以配置文件方式存在,不需要打包-->
<packaging>pom</packaging>
<properties>
<!-- 环境设置:jdk版本和编码设置 -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--spring-cloud设置-->
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
<!--spring-cloud-alibaba设置-->
<spring-cloud-alibaba.version>2.1.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<!--子模块-->
<modules>
<module>provider</module>
<module>customer</module>
</modules>
<!-- 加入依赖 -->
<dependencies>
<!-- 公共Vo模块-->
<!-- <dependency>-->
<!-- <groupId>com.zking</groupId>-->
<!-- <artifactId>comm-vo</artifactId>-->
<!-- <version>0.0.1-SNAPSHOT</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Nacos实现服务注册与发现依赖 这个包必须导,不然就不能被注册中心所发现了-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Nacos配置中心客户端依赖(与Eureka不同没有服务端)-->
<!-- 与eurake不同没有服务端-->
<!-- 在需要使用配置中心的地方才导入此模块-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<!-- </dependency>-->
<!--feign远程调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--junit5测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--工具插件,自动生成setter,getter,hashcode,equals,constructor,妈妈再也不用担心我写重复代码了-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<!-- dependencyManagement和dependencies的区别-->
<!-- 1.dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)-->
<!-- 2.dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。-->
<!-- 如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,-->
<!-- 并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 插件依赖 feifan-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建服务提供者provider
创建一个普通springboot模块
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent><!--继承父模块-->
<groupId>com.liuchunming</groupId>
<artifactId>springcloud1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.liuchunming</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<!--打包方式-->
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
</dependencies>
<build>
</build>
</project>
yml
server:
port: 7101 # 端口
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #去注册自己
application:
name: provider #在注册中心注册名字 如果需要做集群,建议加上编号标识
启动类添加注解@EnableDiscoveryClient
ProviderApplication
package com.liuchunming.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //运行作为客户端使用
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
创建服务消费者consumer
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.liuchunming</groupId>
<artifactId>springcloud1</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.liuchunming</groupId>
<artifactId>customer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>customer</name>
<description>Demo project for Spring Boot</description>
<!--打包方式-->
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
</dependencies>
<build>
</build>
</project>
yml
server:
port: 7201
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #去注册自己
application:
name: customer #在注册中心注册名字 如果需要做集群,建议加上编号标识
启动类
package com.liuchunming.customer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class CustomerApplication {
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class, args);
}
}
然后我们就可以启动测试了,启动生产者、消费者后去Nacos注册中心查看是否注册成功
end…