`
阅读更多

 

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/

1
0
分享到:
评论

相关推荐

    Spring Cloud Nacos示例

    Nacos 支持命名空间,可以创建多个独立的配置和服务空间,实现不同环境(如开发、测试、生产)的隔离,确保配置的安全性和准确性。 **4. 健康检查** Nacos 自带健康检查机制,可以自动检测服务实例的健康状态,确保...

    spring cloud nacos 注册中心

    Spring Cloud Nacos是阿里巴巴提供的一款强大的微服务管理工具,它主要功能之一就是作为服务注册中心。Nacos在设计上融合了配置管理、服务发现和服务管理等多个功能,为开发者提供了便捷的微服务治理方案。在这里,...

    spring cloud nacos服务注册与发现例子

    Spring Cloud Nacos是阿里巴巴提供的一款云原生应用的配置管理和服务发现工具,它结合了Spring Cloud Eureka和Zookeeper的功能,使得在微服务架构中进行服务注册与发现变得更加简单。本示例将深入探讨如何使用Nacos...

    springcloud 整合nacos 配置文件,注册

    在本文中,我们将深入探讨如何将Spring Cloud与Nacos整合,以便实现动态配置管理,并将服务注册到Nacos服务中心。Spring Cloud是微服务架构中的一个关键组件,它提供了多种服务发现、配置、熔断等工具。而Nacos是...

    SpringCloud nacos注册与配置中心搭建

    在IT行业中,Spring Cloud是一个广泛使用的微服务框架,它提供了许多工具和服务,使得开发者能够轻松地构建、配置和管理分布式系统。Nacos是Spring Cloud生态中的一个重要组件,它作为一个服务发现和配置中心,帮助...

    SpringCloud集成Nacos实现配置管理.pdf

    SpringCloud 集成 Nacos 实现配置管理 在微服务架构中,配置管理是一个非常重要的环节。随着微服务数量的增加,配置文件的数量也会相应增加。如果不加以管控,配置文件的管理将变得非常困难。为了解决这个问题,...

    springcloud-nacos-demo.zip

    1. 添加依赖:在`pom.xml`中引入SpringCloud对Nacos的依赖,包括SpringCloud的启动器、Nacos Discovery和Config模块,确保项目可以正确识别并使用Nacos的相关功能。 2. 配置Nacos服务器:在SpringCloud应用中,需要...

    Spring Cloud Alibaba Nacos Config配置中心实现

    Spring Cloud Alibaba Nacos Config 配置中心实现 Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config 的替代方案,提供了分布式配置中心的解决方案。Nacos Config 的存储配置功能为分布式系统中的外部化...

    SpringCloud - Nacos1.3.zip

    Nacos是Alibaba开源的一款针对云应用的服务发现和配置管理平台,它在SpringCloud生态中扮演着重要的角色,特别是在服务注册与配置中心的功能上。 Nacos 1.3.0是其最新版本,相较于之前的版本,可能包含性能优化、新...

    springcloud - 2021.0.3版本 - (一)服务注册nacos+feign

    在本教程中,我们将深入探讨如何使用Spring Cloud的2021.0.3版本,集成Nacos作为服务注册中心,并实现Feign客户端调用。Spring Cloud是一个强大的框架,用于构建分布式系统,如微服务架构,而Nacos是阿里巴巴开源的...

    spring cloud nacos 工具+demo+安装攻略

    Nacos作为Spring Cloud生态的重要组件,为开发人员提供了在分布式系统中管理服务发现和服务配置的能力。 ### 一、Spring Cloud Nacos简介 1. **服务发现**:Nacos可以帮助微服务应用快速找到彼此,提供注册与发现...

    Spring Cloud 整合 Nacos 实现服务配置中心.docx

    &lt;name&gt;springcloud-nacos-config-sample :: Nacos 服务配置中心案例 &lt;!-- 添加Spring Boot、Spring Cloud Alibaba 和 Nacos 相关依赖 --&gt; &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-...

    spring cloud alibaba nacos config配置管理例子

    Spring Cloud Alibaba Nacos 是一个基于阿里巴巴开源项目 Nacos 的组件,专为微服务架构设计,提供了服务发现和服务配置的功能。Nacos Config 是其中的服务配置模块,它允许开发者集中化、动态地管理和推送应用的...

    springcloud-nacos-seata.zip

    首先,Spring Cloud Nacos是一个集成了配置管理和服务发现功能的平台,它为分布式系统提供了核心的服务治理能力。Nacos支持动态配置、服务发现、健康检查等功能,使得微服务架构下的应用能够快速响应环境变化,提高...

    SpringBoot+SpringCloud+nacos+gateway+mybatis搭建微服务

    接着,配置Nacos作为服务注册与发现中心,各个微服务在启动时向Nacos注册自身信息。同时,使用Nacos作为配置中心,微服务可以从Nacos获取配置信息。 在微服务之间进行远程调用时,通常有两种方式:RESTful API和...

    SpringCloud集成Nacos实现服务发现.pdf

    SpringCloud集成Nacos实现服务发现 本文档主要介绍了如何使用SpringCloud集成Nacos来实现服务发现。服务发现是微服务架构中的一种...使用SpringCloud框架和Nacos服务发现组件,可以快速实现服务发现和配置管理等功能。

    SpringCloud Alibaba Nacos服务注册和配置中心.pdf

    SpringCloud Alibaba Nacos是阿里巴巴推出的一个关键组件,用于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos结合了Eureka(服务注册)和Config(配置中心)的功能,同时也集成了消息总线(Bus)的...

    springcloud整合nacos和consul

    在`spring-cloud-lidong-example`这个示例项目中,你可以看到具体的代码实现,包括如何配置和使用Nacos或Consul进行服务注册与发现。通过研究这个例子,你可以更好地理解这两个工具在SpringCloud中的实际应用。

    Spring Cloud Nacos安装指南

    **Spring Cloud Nacos安装指南** Spring Cloud Nacos是一款由阿里巴巴提供的分布式服务治理和配置...接下来,你可以使用Nacos进行服务注册与发现、配置管理等操作,进一步提升你的微服务应用的管理效率和可维护性。

    2021.0.1.0 版本 spring cloud+nacos+geteway完整demo

    idea spring cloud+nacos+geteway完整demo java spring cloud项目下载 spring cloud+nacos+geteway项目下载 需要先安装nacos,不要安装zk 我有另外一个下载,可以下载nacos和安装教程

Global site tag (gtag.js) - Google Analytics