一、Nacos服务注册与发现
1、Nacos简介
Nacos是阿里开源的易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
通俗来说,Nacos是一个注册中心& 配置中心 ——作为注册中心,Nacos可用于替代Spring Cloud中的Eureka、Spring Cloud Zookeeper Discovery、Spring Cloud Consul Discovery;作为配置中心,Nacos可用于替代Spring Cloud Config、Spring Cloud Zookeper Config、Spring Cloud Consul Config。
服务发现的领域模型:
TIPS:其实从Nacos命名的由来:Dynamic Naming and Configuration Service 即可顾名思义了。
1.1、Nacos服务端安装&启动
前往 https://github.com/alibaba/nacos/releases ,下载安装包并解压。
1.2、Nacos支持三种部署模式
- 单机模式 - 用于测试和单机试用。
- 集群模式 - 用于生产环境,确保高可用。
- 多集群模式 - 用于多数据中心场景。
1.3、单机模式下运行Nacos
Linux/Unix/Mac启动:Standalone means it is non-cluster Mode
启动命令:. * sh startup.sh -m standalone
Windows启动:
根据您的操作系统,到 bin 目录执行cmd startup.cmd或者双击startup.cmd文件,即可启动Nacos。
启动后,访问 http://127.0.0.1:8848/nacos 即可看到登录界面。
输入账号密码:nacos/nacos ,即可登录Nacos,并看到类似如下界面:
特别注意:
linux环境默认启动的是集群模式,所以如果启动单机模式,一定要添加参数-m standalone
1.4、集群模式下运行Nacos
集群模式下运行Nacos:
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
1)多集群模式
Nacos支持NameServer路由请求模式,通过它您可以设计一个有用的映射规则来控制请求转发到相应的集群,在映射规则中您可以按命名空间或租户等分片请求...
2)多网卡IP选择
当本地环境比较复杂的时候,Nacos服务在启动的时候需要选择运行时使用的IP或者网卡。Nacos从多网卡获取IP参考Spring Cloud设计,通过nacos.inetutils参数,可以指定Nacos使用的网卡和IP地址。目前支持的配置参数有:
ip-address参数可以直接设置nacos的ip:
nacos.inetutils.ip-address=10.11.105.155
use-only-site-local-interfaces参数可以让nacos使用局域网ip,这个在nacos部署的机器有多网卡时很有用,可以让nacos选择局域网网卡:
nacos.inetutils.use-only-site-local-interfaces=true
ignored-interfaces支持网卡数组,可以让nacos忽略多个网卡:
nacos.inetutils.ignored-interfaces[0]=eth0
nacos.inetutils.ignored-interfaces[1]=eth1
preferred-networks参数可以让nacos优先选择匹配的ip,支持正则匹配和前缀匹配:
nacos.inetutils.preferred-networks[0]=30.5.124.
nacos.inetutils.preferred-networks[0]=30.5.124.(25[0-5]|2[0-4]\\d|((1d{2})|([1-9]?\\d))),30.5.124.(2
1.5. 服务注册&发现和配置管理
服务注册:
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现:
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instances?serviceName=nacos.naming.serviceName'
发布配置:
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
获取配置:
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
关闭服务器Linux/Unix/Mac:
sh shutdown.sh
1.6、如何自定义Nacos默认的账号密码?
默认启动的Nacos,所使用的数据库是Derby。而Derby是一款内嵌式数据库,因此本文所搭建的Nacos显然是不适用生产的,生产环境中的数据库又改如何配置呢?
1)修改nacos\conf目录下面application.properties配置文件
### If user MySQL as datasource:
spring.datasource.platform=mysql
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
2)初始化数据库脚本
schema.sql、nacos-mysql.sql
如何搭建高可用集群?
2、使用Nacos实现服务注册与发现
1)新建项目springcloudalibaba-provider-user作为服务提供者
2)添加pom依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<!-- 加入springcloudalibaba支持 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!--<version>Hoxton.SR3</version>-->
<version>Greenwich.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3)添加配置application.properties
注意配置nacos注册中心地址:192.168.41.241:8848
server.port=8081
spring.application.name=springcloudalibaba-provider-user
spring.cloud.nacos.discovery.server-addr=192.168.41.241:8848
# Value range: 1 to 100. The bigger the value, the greater the weight
#spring.cloud.nacos.discovery.weight=1
# default value is ture
# ribbon.nacos.enabled=ture
management.endpoints.web.exposure.include=*
4)添加启动测试类ProviderUserApplication:
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderUserApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderUserApplication.class, args);
}
@RestController
public class EchoController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}