1,Nacos注册中心
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
1.1:认识nacos
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
编辑
- Nacos用于
服务的注册与发现
和服务的配置管理
。 - Nacos提供了简单易用的Web Console。可以帮助开发者快速的实现服务发现、服务配置管理、服务元数据等需求。
- 官方文档
https://nacos.io/zh-cn/docs/what-is-nacos.html
- 基本架构及概念
概念 | 描述 |
服务 (Service) | 服务是指一个或一组软件功能 |
服务注册中心 (Service Registry) | 服务注册中心,它是服务,其实例及元数据的数据库。 服务实例在启动时注册到服务注册表,并在关闭时注销。 |
服务元数据 (Service Metadata) | 服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据 |
服务提供方 (Service Provider) | 提供可复用和可调用服务的应用方 |
服务消费方 (Service Consumer) | 发起对某个服务调用的应用方 |
配置 (Configuration) | 在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。 |
配置管理 (Configuration Management) | 在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。 |
名字服务 (Naming Service) | 提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务 |
1.2:下载(在官网地址下载压缩包)
Releases · alibaba/nacos · GitHub
编辑
1.3:安装
1.3.1:解压(对压缩包进行解压)
编辑
注意:安装不允许在中文
或空格
目录下 (我想百分之九十九的软件大家都不会安装在中文目录下)
1.3.2:要求
要求:操作系统的位数(32位/64位),和JDK的位数一致的(一定保持位数一致)
操作系统: 编辑
JDK:(黑窗口打出命令:java-version即可查看)
编辑
如果操作系统的版本号与JDK的版本不一致,异常如下:
编辑
1.3.3:一些常见错误:
1)删除data目录重试
如果无法正常运行,删除 data目录后,重新运行
编辑
2)必须配置JAVA_HOME
编辑
- 提示:没有配置JAVA_HOME,且需要JDK的版本为JDK8及其以上。
3)unable to start embedded tomcat
编辑
- 不能成功启动tomcat
- 解决方案:更换JDK
1.4:启动
1.4.1:启动
编辑
编辑
注意:使用startup.cmd -m standalone
编辑
启动成功:
编辑
1.4.2:启动异常:集群启动
运行异常:(因为nacos默认运行方式)
编辑
- cmd运行 startup.cmd 错误提示“nacos is starting with cluster” (nacos以集群的方式的运行)
编辑
1.5:WEB控制台
1.5.1:获得控制台的访问路径
这是我的地址:http://192.168.0.107:8848/nacos/index.html
编辑
1.5.2:登录
账号:nacos
密码:nacos
编辑
1.5.3:控制台管理界面
编辑
2,Nacos快速入门
- 参考官方文实例档
2.1:搭建父项目
- 项目名:
- nacos-parent-01(像我这目录结构太乱其他板块都是之前测试用的,最后把标记的三个创建出来就ok)
- 编辑
- 添加坐标:复制进去进行自动下载:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>2.3.5.RELEASE</version>
</parent>
<properties>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.7.RELEASE</spring.cloud.alibaba.version>
<mybatis.plus.starter.version>3.4.0</mybatis.plus.starter.version>
<durid.starter.version>1.1.10</durid.starter.version>
<swagger.version>2.7.0</swagger.version>
<jwt.jjwt.version>0.9.0</jwt.jjwt.version>
<jwt.joda.version>2.9.7</jwt.joda.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring cloud Dependencies-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring cloud alibaba Dependencies-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.starter.version}</version>
</dependency>
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${durid.starter.version}</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2.2:服务提供者Provider
2.2.1:搭建provider项目
创建项目:nacos_provider_21
添加依赖:
<dependencies>
<!-- web 启动类 -->
<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>
</dependencies>
创建yml文件
server:
port: 9999 #端口号
spring:
application:
name: service-provider #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos服务地址
2.2.2:创建服务
启动类:
@SpringBootApplication @EnableDiscoveryClient //这个注解你要是不写,那指定不算入门成功 public class TestNacosProviderApplication { public static void main(String[] args) { SpringApplication.run(TestNacosProviderApplication.class, args ); } }
写个controller提供一个访问的程序:
@RestController public class EchoController { @Resource private HttpServletRequest request; @GetMapping("/tudou") public String tudou() { int serverPort = request.getServerPort(); return "你好nacos服务,我是爱吃豆的土豆 " + ":" + serverPort; } }
2.2.3:访问服务
编辑
看一下编辑器控制台输出的结果:
编辑
通过Nacos控制台查看
编辑
2.2.4:nacos服务注册失败
编辑
控制台出现这种错误不要慌:是你的nacos服务没有开启,拒绝了访问
2.3:服务消费者Consumer
2.3.1:搭建consumer项目
项目名称:nacos_consumer_21
添加依赖:
<dependencies>
<!-- web 启动类 -->
<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>
<!-- openfeign 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- ### 整合Feign* -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
创建配置文件 :
#端口号
server:
port: 8071
spring:
application:
name: service-consumer #服务名
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos服务地址
sentinel:
transport:
dashboard: 127.0.0.1:18080
feign:
sentinel:
enabled: true
2.3.2:创建服务
创建启动类:
@SpringBootApplication @EnableDiscoveryClient //服务发现 public class TestNacosConsumerApplication { public static void main(String[] args) { SpringApplication.run(TestNacosConsumerApplication.class, args ); } }
远程调用的配置类:
@Component public class RestTemplateConfig { @LoadBalanced //负载均衡(通过服务名访问服务)该注解相关文章在微服务专栏查看 @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
写个controller(这里的url是通过服务名进行访问的提供方)
@RestController public class TestController { @Resource private RestTemplate restTemplate; @GetMapping("/tudouconsumer") public String tudouconsumer(){ String url="http://service-provider/tudou"; \\可以看到是通过服务名称进行访问的提供方 return restTemplate.getForObject(url,String.class); } }
2.3.3:消费方访问服务
首先服务方和消费方的服务都进行启动:
编辑
通过浏览器进行访问消费方的controller,通过消费方的controller中的方法进行访问提供方的controller(成功访问):
编辑
看一下nacos注册中心:
编辑