当前位置: 首页 > news >正文

快速入手:Nacos融合SpringCloud成为注册配置中心

快速入手:Nacos融合SpringCloud成为注册配置中心

  • 前言
    • 安装Nacos
    • 项目搭建
    • 添加配置
    • 启动类添加注解
    • 运行项目
    • 服务调用
      • RestTemplate 模式
      • FeignClient 模式
    • Gateway 网关

前言

  • Spring Cloud是一系列框架的集合,提供了微服务架构下的各种解决方案,如服务治理、配置管理、熔断器、网关等。它基于 Spring Boot,使得开发者能够快速构建微服务应用。
  • Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它可以作为服务注册中心,帮助微服务实例进行注册与发现,使各个微服务之间能够方便地进行通信。Nacos 服务器维护着一个服务注册表,记录着各个微服务的实例信息,如 IP 地址、端口号、服务名称等。当其他微服务需要调用某个服务时,只需从 Nacos 服务器获取服务实例列表,即可进行远程调用。此外,Nacos 还支持服务健康检查,能够实时监测服务实例的健康状态,将不健康的实例从服务列表中剔除,保证服务调用的可靠性。

当与 Nacos 集成时,Spring Cloud 应用可以从 Nacos 服务器获取配置信息。同时,Nacos 支持配置的动态更新,当配置信息发生变化时,微服务应用能够实时感知到变化,并自动更新本地的配置,无需重启应用。
搭建微服务.

安装Nacos

您需要先下载 Nacos 并启动 Nacos server

快速开始所生产出的Nacos服务为单机模式及未开启鉴权,建议仅在测试中使用,若在实际生产环境中部署,请部署集群模式并开启鉴权,以避免存在稳定性和安全性的风险。

您可以通过Nacos的版本下载页面、Github找到每个版本支持的功能的介绍,当前推荐的稳定版本为2.5.1。

Nacos 依赖 Java 环境来运行,请确保是在以下版本环境中安装使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下载 & 配置。

下载完成后解压Nacos压缩包,以Linux为例。

如果是.zip文件执行如下代码:

unzip nacos-server-$version.zip

如果是.gz文件执行如下代码:

tar -xvf nacos-server-$version.tar.gz

解压完成后,进入/bin目录:

cd nacos/bin

注:Nacos的运行建议至少在2C4G 60G的机器配置下运行。

解压后进入/bin目录,执行启动命令,如果是Linux则执行.sh脚本文件,Windows则执行.cmd脚本文件,示例代码如下:

# Linux
sh startup.sh -m standalone
# Windows
startup.cmd -m standalone

standalone代表着单机模式运行,非集群模式。

启动后,返回以下信息说明启动成功,如图所示:

在这里插入图片描述

打开任意浏览器,输入地址:http://127.0.0.1:8848/nacos,即可进入Nacos控制台页面(无需数用户名和密码)。

如果需要关闭服务器,执行对应文件与启动时文件后缀一致,示例代码如下:

# Linux
sh shutdown.sh
# Windows 或者双击
shutdown.cmd

项目搭建

参考官网最新版本说明,如图所示:

在这里插入图片描述

我们使用当前Nacos最新的版本,依赖文件如下:

Spring Boot VersionSpring Cloud Alibaba VersionSpring Cloud Version
3.3.92023.0.3.*2023.0.3
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.sc.nacos.product</groupId><artifactId>sc-nacos-product</artifactId><version>0.0.1-SNAPSHOT</version><name>sc-nacos-product</name><description>sc-nacos-product</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></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></dependencies><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.3.2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2023.0.3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

添加配置

bootstrap.propertiesbootstrap.yml 中配置应用名和文件名、 Nacos server 的地址,示例代码如下:

spring:application:name: sc-nacos-product# 设置外部配置源config:import: nacos:sc-nacos-product-dev.ymlcloud:nacos:# 指定 Nacos 配置服务器的地址config:server-addr: 127.0.0.1:8848# 指定 Nacos 服务发现服务器的地址discovery:server-addr: 127.0.0.1:8848

Nacos上创建对应sc-nacos-product-dev.yml配置文件,如图所示:

在这里插入图片描述

启动类添加注解

启动类增加 @EnableDiscoveryClient开启服务注册发现功能,示例代码如下:

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

运行项目

启动项目,检查配置文件是否连接正常,如图所示:
在这里插入图片描述

再检查服务在Nacos上是否注册成功,如图所示:

在这里插入图片描述

至此一个简单的SpringCloud整合Nacos项目已经完成。

服务调用

Spring Cloud提供了许多用于服务调用的功能。常见的服务调用方式RestTemplateFeignClientRibbonHystrix 等。

RestTemplate 模式

RestTemplateSpring 提供的用于发送 HTTP 请求和接收响应的类。它适用于多种场景,尤其是在没有声明式调用需求时。通过 RestTemplate,你可以直接发送 HTTP 请求并获取返回结果,通常与 Ribbon 结合使用进行负载均衡。

引入依赖:

        <!-- 负载均衡 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

sc-nacos-product服务中定义一个Controller接口,示例代码如下:

@RestController
public class AppController {@GetMapping("/echo/{str}")public String rest(@PathVariable String str){return "hello "+ str;}
}

按照之前的步骤,创建一个调用方项目(比如项目名:sc-nacos-consumer)。

添加 @LoadBlanced 注解,使得 RestTemplate 接入服务发现与负载均衡:

@Configuration
public class AppConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

sc-nacos-consumer服务定义一个Controller接口,调用sc-nacos-product服务接口,示例代码如下:

@RestController
public class AppController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/rest/{str}")public String rest(@PathVariable String str){return restTemplate.getForObject("htt://sc-nacos-product/echo/"+ str, String.class);}
}

使用Postman等工具,请求sc-nacos-consumer服务接口,确认响应无误,如图所示:

在这里插入图片描述

FeignClient 模式

FeignClientSpring Cloud 提供的一个声明式 HTTP 客户端,可以让你通过注解方式自动化服务调用。Feign 会根据接口定义自动实现 HTTP 请求,简化了服务调用的代码,并集成了负载均衡和错误处理功能。

引入依赖:

        <!-- 远程调用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

启动类增加@EnableFeignClients注解,用于启用 Feign 客户端,示例代码如下:

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

使用 @FeignClient 注解将sc-nacos-product服务提供的Controller接口,包装成一个 FeignClient,属性 name 对应对端应用名,示例代码如下:

@FeignClient(name = "sc-nacos-product")
public interface EchoService {@GetMapping(value = "/echo/{str}")String echo(@PathVariable(value = "str") String str);
}

EchoService 作为标准bean 注入sc-nacos-consumer服务,即可对远端服务发起请求了,示例代码如下:

@RestController
public class AppController {@Autowiredprivate EchoService echoService;@GetMapping("/client/{str}")public String client(@PathVariable(value = "str") String str){return echoService.echo(str);}
}

需要注意再sc-nacos-consumer服务,使用@EnableFeignClients注解并指定扫描路径,示例代码如下:

@SpringBootApplication
@EnableFeignClients(basePackages = "com.sc.nacos.product.client")
@EnableDiscoveryClient
public class ScNacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(ScNacosConsumerApplication.class, args);}}

使用Postman等工具,请求sc-nacos-consumer服务接口,确认响应无误,如图所示:

在这里插入图片描述

Gateway 网关

Spring Cloud GatewaySpring Cloud 生态系统中的一个 API 网关,用于路由请求、过滤请求和响应。

引入依赖:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

按照之前的步骤,创建一个网关项目(比如项目名:sc-nacos-gateway)。

启动类添加注解,示例代码如下:

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

application.yml 中配置路由规则:

spring:cloud:gateway:routes:- id: sc-nacos-consumeruri: lb://sc-nacos-consumerpredicates:- Path=/consumer/**- id: sc-nacos-producturi: lb://sc-nacos-productpredicates:- Path=/product/**filters:- StripPrefix=1

每个路由规则使用 - 来表示一个独立的路由。

  • id为当前的路由规则唯一标识符。

  • uri是一个关键配置项,它代表着请求被路由后要前往的目标地址或者服务发现中的服务名。 lb:// 是负载均衡的前缀,当请求/consumer开头的地址,就会被路由到sc-nacos-consumer服务,并且会通过负载均衡算法选择合适的实例来处理请求。

  • predicates 是路由的匹配条件部分,用于判断什么样的请求会被这个路由规则所处理。它表示当请求的路径以任意地址开头时,该请求就会匹配这个路由规则。** 是通配符,可以跟任意的路径信息。

  • filters 是路由的过滤部分,用于在请求被路由前后对请求和响应进行修改或处理。StripPrefix 过滤器的作用是在请求被路由之前,从请求的路径中移除指定数量的路径前缀部分。这里的 1 表示移除路径中的第一个路径段。比如:请求/product/user在经过 StripPrefix=1 过滤器处理后,实际被路由的路径会变成 /user

完整的配置文件如下:

spring:application:name: sc-nacos-gatewayconfig:import: nacos:sc-nacos-gateway.ymlcloud:nacos:config:server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848gateway:routes:- id: sc-nacos-consumeruri: lb://sc-nacos-consumerpredicates:- Path=/consumer/**filters:- StripPrefix=1- id: sc-nacos-producturi: lb://sc-nacos-productpredicates:- Path=/product/**filters:- StripPrefix=1

使用Postman等工具,从网关请求sc-nacos-consumer服务接口,确认响应无误,如图所示:

在这里插入图片描述


http://www.mrgr.cn/news/95609.html

相关文章:

  • kotlin知识体系(三) : Android Kotlin 中的函数式编程实践指南
  • 通往自主智能之路:探索自我成长的AI
  • UDP套接字编程(代码)
  • SpringMVC_day02
  • 分布式系统设计陷阱,白话CAP理论
  • 运行时智控:PanLang 开发者指南(一)运行时系统核心模块实现——PanLang 原型全栈设计方案与实验性探索5
  • nacos未经授权创建用户漏洞
  • 快速入手-基于Django的Form和ModelForm操作(七)
  • SAP-ABAP:SAP BW模块架构与实战应用详解
  • 网心云OEC/OEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试
  • 银河麒麟桌面版包管理器(二)
  • 【Linux】线程库
  • 重温Ubuntu 24.04 LTS
  • 麒麟Win32运行环境
  • PyTorch 面试题及参考答案(精选100道)
  • 图解AUTOSAR_DefaultErrorTracer
  • 本地部署Dify 添加Ollama模型DeepSeek
  • 大模型提示词工程师的自我修养-提示技巧二(思维树、RAG检索增强生成) -(专题2)
  • Guava:Google开源的Java工具库,太强大了
  • hive计算机