热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务使用NACOS(举例:nacos整合gateway)

微服务使用NACOS(举例:nacos整合gateway)文章目录

微服务使用NACOS(举例:nacos整合gateway)



文章目录



  • 微服务使用NACOS(举例:nacos整合gateway)

  • 一,gateway启动服务发现



    • 1.1 pom.xml

    • 1.2 application.yml

    • 1.3 Application.java



  • 二,服务区分不同环境



    • 2.1 NACOS相关概念



      • 命名空间

      • 配置分组



    • 2.2 在NACOS中创建新命名空间

    • 2.3 修改Nacos客户端配置文件



  • 三,使用配置中心



    • 3.1 NACOS相关概念



      • 配置

      • 配置管理

      • 配置项

      • 配置集

      • 配置集 ID



    • 3.2 gateway启动配置管理



      • 3.2.1 pom.xml

      • 3.2.2 bootstrap.yml

      • 3.2.3 在NACOS创建dataID

      • 3.2.4 创建测试接口



    • 3.3 使用多个配置



      • 3.3.1 在NACOS创建新的配置

      • 3.3.2 bootstrap.yml

      • 3.3.3 创建测试接口







一,gateway启动服务发现

1.1 pom.xml

在gateway的依赖中引入spring-cloud-starter-alibaba-nacos-discovery

<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2021.1version>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
<version>3.0.1version>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>

1.2 application.yml

在application.yml中暴露节点和使用nacos注册中心

server:
port: 9001
spring:
application:
name: tools2-gateway
cloud:
nacos:
discovery:
server-addr: localhost:9000
management:
endpoints:
web:
exposure:
include: "*"

1.3 Application.java

最后在启动类中使用@EnableDiscoveryClient注解

package pers.lmc.tools2.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.springbootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author lmc
* @Description: TODO
* @Create 2022-04-04 16:28
* @version: 1.0
*/

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

启动之后可以在NACOS的【服务管理】- 【服务列表】的默认public命名空间找到,分组默认为DEFAULT_GROUP


二,服务区分不同环境

由于我们的项目经常都会出现多种环境(dev,test,prod等等),在使用Eureka作为注册中心的时候,我们是部署了不同环境的eureka服务,每个环境对应一个注册中心。而在NACOS中,我们部署一个服务就好。


2.1 NACOS相关概念


命名空间

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。


配置分组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。


2.2 在NACOS中创建新命名空间

在NACOS的【命名空间】中,选择右上角【新建命名空间】,创建新命名空间
在这里插入图片描述
在这里我创建了开发环境的命名空间devspace


2.3 修改Nacos客户端配置文件

application.yml

server:
port: 9001
spring:
application:
name: tools2-gateway
profiles:
active: dev
management:
endpoints:
web:
exposure:
include: "*"

application-dev.yml

spring:
cloud:
nacos:
discovery:
server-addr: localhost:9000
namespace: f92060d8-326f-483c-8bb7-c6dba0118b2c # 命名空间ID
group: ${spring.profiles.active} # 分组名

重新启动gateway服务,可以在NACOS服务列表中看到

在这里插入图片描述


三,使用配置中心

3.1 NACOS相关概念


配置

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。


配置管理

系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。


配置项

一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。


配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。


配置集 ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。


3.2 gateway启动配置管理


3.2.1 pom.xml

<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
<version>2021.1version>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
<version>3.1.1version>
dependency>

3.2.2 bootstrap.yml

我们在使用Spring Cloud Config时都会使用bootstrap的文件名。Nacos和Spring Cloud Config一样,在项目初始化时,要保证先从配置中心进行拉取,拉取配置之后,才能保证项目的正常启动,也要使用bootstrap的配置文件名,否则读取不到配置。

bootstrap.yml

server:
port: 9001
spring:
application:
name: tools2-gateway
profiles:
active: dev
management:
endpoints:
web:
exposure:
include: "*"

bootstrap-dev.yml

spring:
cloud:
nacos:
server-addr: localhost:9000 # 当同时使用服务发现和配置管理时,未避免配置两次server-addr,可以将服务地址写在这里
discovery:
# server-addr: localhost:9000
namespace: f92060d8-326f-483c-8bb7-c6dba0118b2c # 命名空间ID
group: ${spring.profiles.active} # 组名
config:
# server-addr: localhost:9000
namespace: f92060d8-326f-483c-8bb7-c6dba0118b2c
group: ${spring.profiles.active}
file-extension: yaml # 配置内容的数据格式

3.2.3 在NACOS创建dataID

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}


  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

  • spring.profiles.active 即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

在NACOS页面的【配置管理】 &#8211; 【配置列表】中,点击右上角【+】添加dataID,命名为 tools2-gateway-dev.yaml,如下所示:

在这里插入图片描述


3.2.4 创建测试接口

配置完毕后,我们就需要测试验证刚才的配置是否正确。可以通过在项目中创建接口验证,如下所示:

package pers.lmc.tools2.gateway.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lmc
* @Description: TODO
* @Create 2022-04-05 17:36
* @version: 1.0
*/

@RestController
@RefreshScope
public class TestController {
@Value("${lmc.test:lmc}")
private String test;
@RequestMapping("test")
public String test() {
return test;
}
}

创建完毕,启动项目,访问:http://localhost:9001/test,得到的结果为:

lmchh

在NACOS修改配置lmc.test为lmchhh,重新访问接口http://localhost:9001/test,得到结果:

lmchhh

即配置正确。


3.3 使用多个配置

前面的配置一个服务只对应了一个配置dataID,但在实际上我们一个服务的配置来源可能不止一处。例如上面gateway中,当前只有一个tools-gateway-dev.yaml指定了开发环境。但是,如果我想把路由也在NACOS配置,那这时候意味着,不管是dev,test还是prod环境都共用这个路由配置,这个时候就需要用到nacos的配置集。


3.3.1 在NACOS创建新的配置

在这里插入图片描述


3.3.2 bootstrap.yml

bootstrap-dev.yml

spring:
cloud:
nacos:
server-addr: localhost:9000 # 当同时使用服务发现和配置管理时,未避免配置两次server-addr,可以将服务地址写在这里
discovery:
# server-addr: localhost:9000
namespace: 8628e5dd-a236-4016-b94f-565a001faf2f # 命名空间ID
group: ${spring.profiles.active} # 组名
config:
# server-addr: localhost:9000
namespace: 8628e5dd-a236-4016-b94f-565a001faf2f
group: ${spring.profiles.active}
file-extension: yaml # 配置内容的数据格式
extension-configs[0]:
data-id: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
group: ${spring.profiles.active}
extension-configs[1]:
data-id: ${spring.application.name}.${spring.cloud.nacos.config.file-extension}
group: public

3.3.3 创建测试接口

配置完毕后,我们就需要测试验证刚才的配置是否正确。可以通过在项目中创建接口验证,如下所示:

package pers.lmc.tools2.gateway.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author lmc
* @Description: TODO
* @Create 2022-04-05 17:36
* @version: 1.0
*/

@RestController
@RefreshScope
public class TestController {
@Value("${lmc.test:lmc}")
private String test;
@Value("${lmc.public:pub}")
private String pub;
@RequestMapping("test")
public String test() {
return test;
}
@RequestMapping("pub")
public String pub() {
return pub;
}
}

创建完毕,启动项目,访问:http://localhost:9001/test 和 http://localhost:9001/pub,查看返回结果



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
author-avatar
jerry613
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有