用nacos搭建微服务注册配置中心

前言

最近接触到一个项目需要使用到微服务架构,看了一篇大佬的文章微服务入门对微服务有了一个大致的了解,说的还是比较详细。之前微服务的注册配置用的是Eureka,因为Eureka已经停止更新了,所以这篇我们简单聊一下阿里的Nacos,比较基础,仅供学习用。


一、Nacos是什么?

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。摘自官网文档(狗头)。
Nacos官网文档:Nacos文档

二、部署Nacos

1.下载安装

下载(图例):
下载图例
点击上图中的url会跳转到GitHub,选择对应的Windows或者linux的版本下载即可,我这里使用的Windows系统,下载.zip文件
下载图例

2.启动服务

下载解压后对应有bin、conf、log等目录,我们进去bin目录直接双击击startup.cmd文件启动服务会发现报错,因为nacos还需要进行部署,其部署方式有三种:单机模式、集群模式、多集群模式(来自官网文档)。这里我们为了简单的学习和使用,部署单机模式。

3.单机模式的部署

1)在自己的mysql数据库中新建一个数据库,名字为nacos
2)在nacos数据库下执行在刚解压的conf目录下的nacos-mysql.sql文件,会添加一些表
3)修改conf目录下的application.properties,内容如下(即连接mysql数据库的连接配置):

### Count of DB:
db.num=1
### Connect URL of DB:
db.url=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456

4)修改bin目录下的startup.cmd文件,内容如下(修改nacos的部署模式为单机模式):

set MODE="standalone"

5)都配置完成后再次双击击bin目录下的startup.cmd启动服务看是否能成功启动,nacos的默认端口是:8848,然后访问http://localhost:8848/nacos/index.html并以用户名密码都为nacos登录进去就可以进行服务的配置和注册。
成功启动截图
成功启动截图
成功访问截图
成功访问截图

三、服务注册

1.注册生产者(用来提供远程访问接口的服务)

使用idea新建一个项目springboot项目,然后在项目下新建一个名为providerser模块作为一个生产者微服务,maven依赖如下:

	<properties>
			<java.version>1.8</java.version>
			<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
		</properties>
	<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	</dependency>
	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	</dependency>
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<optional>true</optional>
	</dependency>
	<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>
</dependencies>
<dependencyManagement>
		<dependencies>
			<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>

在application.properties的配置如下:

##服务提供者server provider
server.port=8081
spring.application.name=providerser
##nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#允许其他服务通过注册中心发现该服务#
eureka.instance.prefer-ip-address= true

在启动类上添加注解@EnableDiscoveryClient进行服务注册:

##服务提供者server provider
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderserApplication {
	public static void main(String[] args) {
		SpringApplication.run(ProviderserApplication.class, args);
	}
}

新建一个controller类,在类中写一个供远程访问的接口(正常的接口即可):

@RestController
@Slf4j
@RequestMapping("/provider")
public class ProviderController {
    @RequestMapping(value="/getUserList")
    public List<String> getUserList(){
        log.info("开始调用start");
        List<String> result=new ArrayList<>();
        result.add("test1");
        result.add("test2");
        result.add("test3");
        result.add("test4");
        result.add("test5");
        result.add("test6");
        log.info("调用end");
        return  result;
    }
}

成功启动该模块后会自动在nacos中注册该服务,在nacos的服务管理下的服务列表中可查看到,如图:
注册生产者

2.注册消费者(用来远程访问接口的服务)

同样在项目下新建一个名为consumerser模块作为一个消费者微服务,maven依赖如下:

	<properties>
			<java.version>1.8</java.version>
			<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
		</properties>
	<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
       </dependency>
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
       </dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-openfeign</artifactId>
		<version>2.2.3.RELEASE</version>
	</dependency>
       <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>
</dependencies>
<dependencyManagement>
		<dependencies>
			<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>

在application.properties的配置如下:

server.port=8082
spring.application.name=consumerser
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

在启动类上添加注解@EnableDiscoveryClient进行服务注册,同时添加@EnableFeignClients注解(采用Feign进行远程接口访问):

@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerserApplication {
	public static void main(String[] args) {
		SpringApplication.run(ConsumerserApplication.class, args);
	}
}

写远程访问接口,类似service层,这里指向的是生产者对应的接口(即远程访问生产者的接口):

//这里写远程调用服务注册的服务名(spring.application.name中配置的内容)
@FeignClient(value="providerser")
public interface UserApi {
    //这里写要调用的远程服务接口
    @RequestMapping(value = "/provider/getUserList",method = RequestMethod.POST)
    List<String> getFeignList();
}

写远程访问接口,controller层:

@RestController
@RequestMapping(value = "/remoteApi")
public class ConsumerController {
    @Autowired
    private UserApi UserApi;
    @RequestMapping("/getFeignList")
    public List<String> getFeignList(){
        return this.UserApi.getFeignList();
    }
}

同样的,成功启动该模块后会自动在nacos中注册该服务,在nacos的服务管理下的服务列表中同样可查看到,如图:
成功注册的服务
使用postman测试,调用消费者微服务的接口,然后消费者会远程调用生产者的接口返回的数据:
调用消费者接口

四、配置管理

当服务数量超过一定程度之后,如果需要在每个服务里面分别维护每一个服务的配置文件,运维人员估计要哭了。如下图所示,你所有的配置文件都会在配置列表里面,我们这里配置好后,直接可以启用一个访问配置的服务,通过接口获取到对应配置文件的所有内容。也可以直接进入这个页面进行实时远程的更改。
配置列表

1.管理配置

就不需要过多介绍了,直接在上图对对应的配置文件进行增删改查操作就ok。点加号进行配置,配置成功后如下图:
配置内容

2.访问配置

在项目再下新建一个名为configser模块作为一个配置文件访问服务,maven依赖如下:

	<properties>
			<java.version>1.8</java.version>
			<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
		</properties>
	<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-openfeign</artifactId>
	</dependency>
	<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>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
		<version>0.2.1.RELEASE</version>
	</dependency>
</dependencies>
<dependencyManagement>
		<dependencies>
			<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>

在application.properties的配置如下:

spring.profiles.active=dev
server.port=8083

新建一个文件bootstrap.properties,配置内容如下:

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=configser
spring.cloud.nacos.config.file-extension=properties
management.endpoints.web.exposure.include=*

写访问配置文件内容的接口,controller层:

@RestController
@RequestMapping("/config")
//修改后能自动根据修改进行刷新注解
@RefreshScope
public class ConfigController {
    @Value("${useLocalCache}")
    private String useLocalCache;
    @RequestMapping("/get")
    public String getConfigSet(){
        return useLocalCache;
    }
}

使用postman测试,调用配置服务的接口,会返回之前在配置中心中配置好的数据useLocalCache的值,如图:
获取配置内容
好的,对nacos的简单介绍到此结束,我其实也是为了对微服务的进一步的学习和加深理解,如果你觉得还行请点赞一下,共同学习,共同进步,感谢!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Gateway和Nacos搭建微服务架构的两个重要组件。 Gateway作为微服务架构中的API网关,可以将所有的外部请求导向到正确的微服务实例。Gateway的配置需要定义路由规则,指定请求的路径和目标服务的地址等信息。 Nacos微服务注册中心配置中心,可以为微服务实例提供服务注册和发现的功能。通过Nacos微服务可以注册自己的实例,并查找其他微服务实例的地址和端口号。 要搭建微服务架构,首先需要在Nacos注册所有的微服务实例。然后在Gateway中定义路由规则,指定请求的路径和目标服务的地址。当客户端请求到达Gateway时,Gateway会根据路由规则将请求转发到相应的微服务实例。 需要注意的是,在搭建微服务架构时,还需要考虑负载均衡、熔断、限流等方面的问题,以确保微服务的稳定性和可靠性。 ### 回答2: 在当今云原生时代,微服务已成为许多企业和开发者的首选架构,而gateway和nacos则是常用的微服务组件之一。 Gateway是Spring Cloud的一个子项目,是一个API网关,它的主要作用是为微服务提供统一的入口和请求路由控制,同时还可以进行鉴权、限流、降级等功能。和普通的web服务相比,Gateway具有更高的性能和可扩展性。 而Nacos则是阿里巴巴开源的一款基于服务治理的中间件,主要用于服务发现、配置管理以及流量管理。Nacos可以帮助我们实现服务注册、配置管理、服务发现等功能,比较适合用来构建微服务的基础设施。 下面我们来看一下如何使用Gateway和Nacos搭建微服务。 1. 安装Nacos服务器并启动 首先需要下载Nacos服务器并启动。可以到官网下载最新版Nacos服务器,解压后进入bin目录,通过启动脚本启动Nacos服务器: ```bash sh startup.sh -m standalone ``` 2. 引入依赖和配置Gateway 接下来需要引入Gateway的依赖和进行相关配置。在pom.xml文件中添加Gateway的依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.5.RELEASE</version> </dependency> ``` 在application.yml文件中添加Gateway的相关配置信息: ```yaml spring: cloud: gateway: routes: - id: service-example uri: lb://service-example predicates: - Path=/example/** ``` 其中,id指定了路由的名称,uri指定了微服务的地址,predicates则指定了请求的匹配规则。 3. 注册微服务Nacos 接下来需要将微服务注册Nacos服务器中,以便Gateway可以进行服务发现和路由控制。在微服务的配置文件中添加Nacos相关的配置信息: ```yaml spring: application: name: service-example cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 namespace: dev ``` 4. 启动微服务和Gateway 最后一步就是启动微服务和Gateway。可以通过Spring Boot的插件启动微服务: ```bash mvn spring-boot:run ``` 启动Gateway的方式也类似: ```bash mvn spring-boot:run -Dspring-boot.run.profiles=gateway ``` 启动完成后,就可以通过Gateway访问微服务了。例如,可以通过http://localhost:8080/example/xxx访问到微服务中的/example/xxx接口。 总的来说,Gateway和Nacos搭建微服务是一个比较简单的过程,它们的出现大大简化了微服务的部署和治理,减轻了开发者的负担,值得我们在实际项目中使用和研究。 ### 回答3: Gateway和Nacos是目前常用的两个微服务框架。Gateway是Spring Cloud Gateway的简称,是一个基于Spring Boot的反向代理框架,它可以进行路由控制、请求转发和筛选等一系列操作。而Nacos是一个基于服务中心的微服务平台,它可以进行服务注册、配置管理和健康检查等操作。 将这两个框架搭配起来,可以方便实现微服务注册与发现、服务网关的动态路由等操作。下面是具体的搭建步骤: 1.安装Nacos,可从官网下载并安装。Nacos包含一个控制台和一个服务端,可以使用默认配置运行或者进行自定义。 2.在控制台中注册微服务。在控制台中创建一个命名空间,之后再创建微服务。服务创建完成后,可以在控制台上查看服务的实例列表信息。 3.在网关服务中进行配置。在网关的application.properties或者application.yml文件中,可以进行Nacos配置扫描的位置和启用eureka。如: eureka: client: service-url: defaultZone: http://localhost:8181/eureka/ spring: cloud: gateway: discovery: locator: enabled: true lowerCaseServiceId: true predicates: - name: DiscoveryClient 4.启动网关服务。启动网关应用程序后,可以使用浏览器或者Postman等工具来验证路由规则是否生效。 以上是Gateway和Nacos搭建微服务的简易步骤。和其他微服务框架相比,这种搭配是比较新的,但在性能方面有很好的优势。在实际应用中,还需要根据具体情况进行优化和改进,进一步提升系统的稳定性和性能表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值