SpringCloud Nacos使用和配置,SpringCloud Nacos 服务注册中心配置使用
================================
©Copyright 蕃薯耀 2021-03-26
http://fanshuyao.iteye.com/
如果图片没出来,请移步:
https://www.cnblogs.com/fanshuyao/p/14577910.html
一、SpringCloud Nacos概述
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
官方地址:
https://nacos.io/zh-cn/index.html
官方文档:
https://nacos.io/zh-cn/docs/what-is-nacos.html
Spring官方文档:
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html
Nacos 的关键特性包括:
1、服务发现和服务健康监测
2、动态配置服务
3、动态 DNS 服务
4、服务及其元数据管理
Nacos架构图
二、SpringCloud nacos下载
nacos全部版本下载地址
https://github.com/alibaba/nacos/releases
当前最新稳定版本是:nacos-server-1.4.1.zip,nacos-server-2.0.0-BETA.zip现在还是测试版本
Windows下载地址:
https://download.fastgit.org/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.zip
Linux下载地址:
https://download.fastgit.org/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz
三、启动nacos
解压nacos-server-1.4.1.zip,进行目录(D:\0soft\nacos-server-1.4.1\nacos\bin),双击:startup.cmd 进行启动
nacos启动报错:
java.io.IOException: java.lang.IllegalArgumentException: db.num is null
原因是:
nacos默认是集群方式的,要配置mysql,利用Mysql共享配置信息
解决方案:
启动方式一(单机模式),建议使用这种方式:
在bin路径(D:\0soft\nacos-server-1.4.1\nacos\bin)打开cmd命令窗口,输入下面的命令启动:
startup.cmd -m standalone
关闭:
打开cmd命令窗口,输入下面的命令:
cmd shutdown.cmd
或者双击shutdown.cmd关闭nacos。
访问nacos管理后台,用浏览器打开下面的地址:
http://127.0.0.1:8848/nacos
登录名:nacos
密码:nacos
启动方式二(单机模式):
复制一个startup.cmd(备份),用编辑器打开:startup.cmd,找到下面的命令:
set MODE="cluster"
修改成单机模式:
set MODE="standalone"
然后双击:startup.cmd重新启动,成功。
这种方式,就是不用输额外的启动参数
启动方式三(Mysql单机模式):需要创建数据库(仅支持Mysql,最好是5.7版本,5.5版本执行脚本文件时,默认时间会有问题)
Nacos使用Mysql5.5版本问题:
错误代码: 1067
Invalid default value for 'gmt_create'
Windows Mysql5.7安装和配置,Windows 安装多个Mysql,见:
https://www.cnblogs.com/fanshuyao/p/14557184.html
创建nacos数据库:
数据库名:nacos
字符集编码:utf8mb4
排序规则:utf8mb4_general_ci
创建表,执行nacos-mysql.sql文件的sql脚本
脚本的位置在:
D:\0soft\nacos-server-1.4.1\nacos\conf\nacos-mysql.sql
修改D:\0soft\nacos-server-1.4.1\nacos\conf\application.properties配置文件:
默认是:
#spring.datasource.platform=mysql ### Count of DB: #db.num=1 ### Connect URL of DB: #db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC #db.user.0=nacos #db.password.0=nacos
修改后:
spring.datasource.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3307/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=root
Nacos使用配置数据库的使用集群方式报错:
nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
Caused by: com.alibaba.nacos.api.exception.NacosException: java.net.UnknownHostException: jmenv.tbsite.net
Caused by: java.net.UnknownHostException: jmenv.tbsite.net
虽然配置了数据库,但还是不能以集群的方式启动,还是要在bin路径(D:\0soft\nacos-server-1.4.1\nacos\bin)打开cmd命令窗口,输入下面的命令启动:
startup.cmd -m standalone
那为什么要使用Mysql数据呢?
原因是:
Nacos默认是使用了嵌入式数据库Derby,所以保存了用户相关的配置。但如果Nacos使用了集群,每个Nacos应用都有自己独立的Derby数据库,会造成数据库中配置的信息不一致。所以必须使用Mysql替换,保存配置信息完全一致。
修改了数据库的连接配置,只是使用了Mysql数据库替换了Nacos自带的嵌入式数据库Derby,所有的配置都保存到了mysql数据库中。
所以最终还是得以单机模式(standalone)启动。
至于Nacos集群模式怎样启动?见:
https://www.iteye.com/blog/fanshuyao-2519928
四、SpringCloud Nacos Provider服务提供者
使用2个服务提供者,这样可以测试负载均衡:
springCloud-8801-nacos-provider
springCloud-8802-nacos-provider
1、pom.xml引入依赖
<properties> <spring-cloud.version>Hoxton.SR10</spring-cloud.version> </properties>
<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>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <!-- <version>2.2.4.RELEASE</version> --> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.4.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2、application.properties配置文件修改
server.port=8801 spring.application.name=SPRING-CLOUD-NACOS-SERVICE #配置nacos服务地址,通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能: spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3、启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * @EnableDiscoveryClient:通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能 * */ @SpringBootApplication @EnableDiscoveryClient public class SpringCloud8801NacosProviderApplication { public static void main(String[] args) { SpringApplication.run(SpringCloud8801NacosProviderApplication.class, args); } }
4、服务调用接口类
import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.lqy.springCloud.Result; @RestController @RequestMapping("/nacos") public class ProviderController { @Value("${spring.application.name}") private String serviceName; @Value("${server.port}") private String serverPort; @RequestMapping(value="/test", produces = MediaType.APPLICATION_JSON_VALUE) public Result test() { return Result.ok(serverPort); } @RequestMapping(value="/get/{text}", produces = MediaType.APPLICATION_JSON_VALUE) public Result get(@PathVariable(value = "text") String text) { return Result.ok("端口=" + serverPort + ",text=" + text); } }
五、SpringCloud Nacos Consumer服务消费者
服务消费者只需要一个:
springCloud-8805-nacos-web
1、pom.xml引入依赖
依赖和服务提供者一样。
2、application.properties配置文件修改
server.port=8805 spring.application.name=SPRING-CLOUD-NACOS-CONSUMER #配置nacos服务地址,通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能: spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 #服务提供者的服务名,接口调用需要用到 my.nacos.service.name=SPRING-CLOUD-NACOS-SERVICE
3、启动类
@EnableDiscoveryClient
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能: * */ @SpringBootApplication @EnableDiscoveryClient public class SpringCloud8805NacosWebApplication { public static void main(String[] args) { SpringApplication.run(SpringCloud8805NacosWebApplication.class, args); } }
4、服务调用接口类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import com.lqy.springCloud.Result; @RestController @RequestMapping("/web") public class WebController { //消费者自己的服务名 @Value("${spring.application.name}") private String serviceName; @Value("${server.port}") private String serverPort; //服务提供者的服务名 @Value("${my.nacos.service.name}") private String myNacosServiceName; @Autowired private RestTemplate restTemplate; @RequestMapping(value="/test", produces = MediaType.APPLICATION_JSON_VALUE) public Result test() { return Result.ok(serverPort); } @RequestMapping(value="/get/{text}", produces = MediaType.APPLICATION_JSON_VALUE) public Result get(@PathVariable(value = "text", required = false) String text) { return restTemplate.getForObject("http://" + myNacosServiceName + "/nacos/get/" + text, Result.class); } }
5、RestTemplate配置类
import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RestConfig { //@LoadBalanced实现负载均衡,有多个服务提供者,一定要使用,不然会报错 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
六、【消费者】调用【服务提供者】的接口测试
Nacos整合了Ribbon,默认是轮询负载均衡算法
http://127.0.0.1:8805/web/get/a
返回结果:
{ "result": true, "timestamp": "2021-03-19 15:53:24", "msg": "操作成功。", "datas": "端口=8802,text=a" }
(如果文章对您有所帮助,欢迎捐赠,^_^)
================================
©Copyright 蕃薯耀 2021-03-26
http://fanshuyao.iteye.com/
相关推荐
Spring Cloud Nacos入门工程示例。文档详见: https://blog.csdn.net/c123m/article/details/107598353
spring cloud nacos的可视化界面,微服务可以注册进nacos,支持CP,AP两种方式。
spring cloud+nacos spring cloud nacos demo spring cloud nacos 安装攻略
spring cloud nacos服务注册与发现例子
SpringCloud集成Nacos实现配置管理.pdf
SpringCloud 服务注册和配置中心,Nacos 最新版 1.3.0。github 的下载速度不好,下不下来,有需要的拿走,Linux 和 windows 通用
spring cloud alibaba nacos config配置管理例子
idea spring cloud+nacos+geteway完整demo java spring cloud项目下载 spring cloud+nacos+geteway项目下载 需要先安装nacos,不要安装zk 我有另外一个下载,可以下载nacos和安装教程
1. 先配置 nacos server 2. 启动 ProviderApplication.java类 3. 启动 ConsumerApplication.java类 4. 浏览器中输入 http://localhost:8082/say/hello
springcloud整合nacos的小demo
使用SpringCloud Gateway整合Nacos,实现服务网关转发、配置中心、注册中心功能,使用技术版本信息为SpringCloud2021.0.3版本、nacos2.0.3版本、Springboot2.7.0版本,项目包含gateway网关服务和简单的product-...
SpringCloud Alibaba Nacos服务注册和配置中心;⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。Nacos Dynamic Naming and Configuration Service,Nacos就是注册中⼼+配置中⼼的组合,等价于:...
采用前后端分离的模式,微服务版本前端(基于 RuoYi...注册中心、配置中心选型Nacos,权限认证使用Redis。流量控制框架选型Sentinel,分布式事务选型Seata。提供了技术栈(Vue3 Element Plus Vite)版本RuoYi-Cloud-Vue3
https://blog.csdn.net/xiatianit/article/details/124053055
模拟订单和库存的一个简单案例实现,注册到nacos配置中心,通过feign远程调用模拟异常进行全局事物回滚。 内含sql文件,nacos、seata安装包以及对应seata配置所需的script脚本(也可自行官网下载) ...
SpringCloud集成Nacos实现服务发现.pdf
springcloud接入nacos&seata实现 XA+AT+TCC分布式事务
SpringCloud入门 nacos 使用dubbo调用服务
SpringCloud 构建微服务系统之服务注册和发现(nacos和consul)
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。...Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。详细可查看 https://korgs.blog.csdn.net/article/details/138537452