springCloud整合Nacos当配置中心和注册中心

news2024/11/27 22:46:28

前言

本文主要介绍SpringCloud使用Nacos当配置中心和注册中心,通过一个简单的Demo学习Naocs的基本配置以及不同微服务之间通过RestTemplate 及openfeign完成接口调用。

Nacos的安装配置

Nacos的学习资源主要有以下两个

  1. Nacos管网 Nacos管网
  2. Nacos GitHub NacosGitHub

下载Nacos

直接从GitHub https://github.com/alibaba/nacos/releases下载对应版本的Nacos,本文使用2.1.0,没有GitHub加速的可以直接从CSDN下载,我上传的,完全免费,不需要积分https://download.csdn.net/download/whzhaochao/88074308

启动Naocs

如果是Windows 修改startup.cmd中的配置set MODE="standalone"配置成单机模式,然后点击startup.cmd运行就可以启用Nacos了,也可以使用startup.sh -m standalone 指定启动模式。

在这里插入图片描述
当我们看到 8848后,说明启动成功,浏览器输入http://127.0.0.1:8848/nacos/,用户名nacos,密码nacos就可以登录进入Nacos了。

配置nacos

在这里插入图片描述
进入Nacos后有几个概念需要简单说明一下

命名空间

可以理解成不同的环境,比如dev/test/prod对应开发/测试/正式,我们可以分别创建这三个环境,注意命名空间ID(不填则自动生成)我们就不填,让他自动生成好了。
在这里插入图片描述

配置列表

配置列表就是替代我们以前项目的中yml或者properties文件,我们选择dev环境创建一个DataID为user-service Group为Shop,这里DataID可以理解成对应我们的一个微服务,Group可以理解成我们的一个项目,我们做一个商城,会有用户中心,订单中心。这里商城项目可以理解成Group,用户中心可以理解成Data ID。

在这里插入图片描述

服务管理

这里服务管理就对应我们的一个微服务,当我们的微服务启动后会自动注册到这里来,目前还没有数据
在这里插入图片描述

SpringCloud环境搭建

我们做一个非常简单的Demo,基本逻辑就是启用一个用户中心,里面从nacos配置中心拉取用户配置,然后对应提供一个接口通过ID获取用户信息,在订单中心中创建一个接口,调用用户中心的接口获取用户信息,基本项目架构如下图:
在这里插入图片描述
这里我们引用POM是有个注意事项:不同的SpingBoot版本和cloud-alibaba以及nacos可能是不兼容,我们可以从https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E查看对应的兼容版本

    <properties>
        <spring-boot-start-web.version>2.3.11.RELEASE</spring-boot-start-web.version>
        <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot-start-web.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>
</project>

用户中心的 bootstrap.yml配置

这里我们主要看两个关键配置nacos.config和nacos.discovery, config主要是配置从nacos拉取配置信息,这里我们prefix就对应用我们nacos后台的user-service,namespace对应我们的开发环境,group就对应我们的项目shop。

server:
  port: 82
spring:
  profiles:
    active: dev
  application:
    name: user-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        group: shop
        enabled: true
        prefix: user-service
        namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
        file-extension: yaml
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos
        namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
        group: shop

依赖配置

        <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-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

我们看一下UserConfig这个类,通过这个类我们可以拉取nacos中配置的users.list数据。

@Configuration
@ConfigurationProperties("users")
@Data
public class UserConfig {
	private List<User> list;
}

我们看一下UserController 这个类提供了一个/user/{id}通过id获取nacos配置中心的用户信息。

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
    @Value("${server.port}")
    private Integer port;
    @Resource
    private UserConfig userConfig;
    @GetMapping("/{id}")
    public User info(@PathVariable Long id){
        return  userConfig.getList().stream().filter(x->x.getId().equals(id)).peek(x-> x.setPort(port)).findFirst().get();
    }
}

启用nacos-user项目,当我们启动nacos-user项目后,在nacos后台可以看到user-service,端口是82

在这里插入图片描述

我们通过nacos上显示的IP及端口 http://192.168.1.103:82/user/1,可以成功的获取nacos的配置信息

在这里插入图片描述

订单中心

订单中心配置

server:
  port: 81

spring:
  profiles:
    active: dev
  application:
    name: order-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        group: shop
        enabled: true
        prefix: order-service
        namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
        file-extension: yaml
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos
        namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
        group: shop

依赖配置

        <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-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

订单中心,在订单中心我们写了两个接口/order/{id}通过restTempate调用用户中心的接口和/order/feign/{id}通过openFeign调用用户中心的接口,这里需要注意的是 在配置RestTemplate需要加上@LoadBalanced,不然会找不到接口地址,加上后会使用ribon负载均衡ribon会从注册中心通过user-service找到对应的服务地址。

@RestController
@RequestMapping("/order")
public class OrderController {
    @Resource
    private RestTemplate restTemplate;
    @Resource
    private UserFeign userFeign;
    @GetMapping("/{id}")
    public User info(@PathVariable Long id){
       return restTemplate.getForObject("http://user-service/user/".concat(id.toString()), User.class);
    }
    @GetMapping("/feign/{id}")
    public User feign(@PathVariable Long id){
        return userFeign.getUser(id);
    }
}
@Configuration
public class RestTempleteConfig {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

@FeignClient(value = "user-service")
@Component
public interface UserFeign {
    @GetMapping("user/{id}")
    User getUser(@PathVariable Long id);
}

启动nacos-order ,在nacos的服务中会有一个order-service,我们通过IP及端口访问对应接口,完成对用户中心服务的调用
在这里插入图片描述
输入http://192.168.1.103:81/order/1通过restTempate调用用户中心接口
输入http://192.168.1.103:81/order/feign/2通过openFeign调用用户中心接口

这里我们复制user-service启动配置然后覆盖service.port启动两个user-service
在这里插入图片描述

image.png

可以看到nacos后台user-service有两个实例了

image.png
调用order-service时是不同user-service提供的,达到负载均衡的作用。

image.png

最后

本文是学习nacos的入门篇,后续还会学习更多nacos相关内容
项目源码:https://gitee.com/whzhaochao/nacos-study

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/777985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智力差异性对课程的影响

“收藏从未停止&#xff0c;练习从未开始”&#xff0c;或许有那么一些好题好方法&#xff0c;在被你选中收藏后却遗忘在收藏夹里积起了灰&#xff1f;今天请务必打开你沉甸甸的收藏重新回顾&#xff0c;分享一下那些曾让你拍案叫绝的好东西吧&#xff01; 你可以从以下几个方…

debian/PVE安装好后拔显卡后连接不了网络

目录 前因 原因 解决办法 注意 需要主板bios支持跳过显卡自检 解决好主板bios问题然后再继续解决系统问题 前因 前几天装了个​Proxmox​ ve当做一个服务器7*24开机 但是由于转好系统后&#xff0c;显卡就不需要了 加上它耗电的原因&#xff08;我的gtx650平时空载有1…

JavaFx开发图形化界面常用颜色对照表

LightPink 浅粉色 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 #DC143C 220,20,60 LavenderBlush …

【PostgreSQL内核学习(六)—— 工具使用学习】

工具使用学习 工具使用学习安装中出现的问题 声明&#xff1a;本文的工具学习内容来自于《小宇带你学pg内核分析》 工具的代码仓库链接为&#xff1a; https://github.com/shenyuflying/pgNodeGraph 此外&#xff0c;我还参考了以下文章&#xff1a; https://rng-songbaobao.bl…

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio制作蛋仔派对兑换码工具

目录 &#x1f373;前言&#x1f373;实验介绍&#x1f373;产品介绍&#x1f373;抓包分析&#x1f603;登录分析&#x1f603;&#x1f603;第一步&#xff0c;获取验证码&#x1f603;&#x1f603;第二步&#xff0c;保存验证码&#x1f603;&#x1f603;第三步&#xff0…

RocketMQ教程-(4)-领域模型概述

Apache RocketMQ 是一款典型的分布式架构下的中间件产品&#xff0c;使用异步通信方式和发布订阅的消息传输模型。通信方式和传输模型的具体说明&#xff0c;请参见下文通信方式介绍和消息传输模型介绍。 Apache RocketMQ 产品具备异步通信的优势&#xff0c;系统拓扑简单、上下…

ffmpeg中filter_query_formats函数解析

ffmpeg中filter_query_formats主要起一个pix fmt引用指定的功能。 下下结论&#xff1a; 先看几个结构体定义&#xff1a; //删除了一些与本次分析不必要的成员 struct AVFilterLink {AVFilterContext *src; ///< source filterAVFilterPad *srcpad; ///<…

C语言程序运行需要的两大环境《C语言进阶》

目录 程序的翻译环境和执行环境 翻译环境分为两部分&#xff0c;编译链接 第一步&#xff1a;预编译&#xff08;预处理&#xff09; 第二步&#xff0c;编译 第三步&#xff1a;汇编 关于运行环境分为四点&#xff1a; 关于链接库 程序的翻译环境和执行环境 在 ANSI C(标…

三十章:Segmenter:Transformer for Semantic Segmentation ——分割器:用于语义分割的Transformer

0.摘要 图像分割在单个图像块的级别上经常存在歧义&#xff0c;并需要上下文信息来达到标签一致性。在本文中&#xff0c;我们介绍了一种用于语义分割的Transformer模型- Segmenter。与基于卷积的方法相比&#xff0c;我们的方法允许在第一层和整个网络中对全局上下文进行建模。…

C语言 与 C++ 通讯录对比实现(附源码)

目录 1.通讯录的基本框架 C语言版 C版 2.增加联系人 C语言版 C版 3.删除联系人 C语言版 C版 4.查找与打印联系人 C语言版 C版 5.修改联系人 C语言版 C版 6.排序联系人 C语言版 C版 7.其他 8.总结 本文章将对C语言、C版本的通讯录进行对比实现。其中C版本引入大量C语言没有的特性…

macOS 源码编译 Percona XtraBackup

percona-xtrabackup-2.4.28.tar.gz安装依赖 ╰─➤ brew install cmake ╰─➤ cmake --version cmake version 3.27.0brew 安装 ╰─➤ brew update╰─➤ brew search xtrabackup > Formulae percona-xtrabackup╰─➤ brew install percona-xtrabackup╰─➤ xtr…

提升 API 可靠性的五种方法

API 在我们的数字世界中发挥着关键的作用&#xff0c;使各种不同的应用能够相互通信。然而&#xff0c;这些 API 的可靠性是保证依赖它们的应用程序功能正常、性能稳定的关键因素。本文&#xff0c;我们将探讨提高 API 可靠性的五种主要策略。 1.全面测试 要确保 API 的可靠性…

Kubernetes 入门

Kubernetes 入门 文章目录 Kubernetes 入门一、Kubernetes 环境部署1. 环境准备2. 测试部署 Nginx3. 在任意节点使用 kubectl 二、深入 pod1. 使用配置文件部署引用2. 探针 三、资源调度1.标签与选择器2.Deployment3.StatefulSet4.DaemonSet5.HPA6. Service7. Ingress8. 配置管…

【Unity】为角色添加动画

如何添加动画 在Animations的AnimationClips文件夹下自己为角色创建一个文件夹 为角色添加Animator 然后选中上面创建的文件夹&#xff0c;拖动到上图中的Controller中 点击最上方任务栏的Window>Animation>Animation&#xff0c;这会弹出一个Animation窗口 该窗口存在时…

算法leetcode|63. 不同路径 II(rust重拳出击)

文章目录 63. 不同路径 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 63. 不同路径 II&#xff1a; 一个机器人位于一个 m x n 网格…

SQL_SQL_常见面试问题

问题类型 &#xff1a;SQL优化 问题描述 &#xff1a;用户浏览日志&#xff08;date, user_id, video_id&#xff09;, 统计 2020.03.29 观看不同视频个数的前5名 user_id。 思路 &#xff1a;主要注意预计算&#xff0c;避免直接去重 解决方案 &#xff1a; Hive_HQL_Hive…

【VB6|第20期】遍历Excel单元格的四种方法

日期&#xff1a;2023年7月19日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

架构实战微服务架构拆解

作业内容 拆分电商系统为微服务。 背景&#xff1a;假设你现在是一个创业公司的 CTO&#xff0c;开发团队大约 30 人左右&#xff0c;包括 5 个前端和 25 个后端&#xff0c;后端开发人员 全部都是 Java&#xff0c;现在你们准备从 0 开始做一个小程序电商业务&#xff0c;请你…

2023牛客暑期多校训练营1--K Subdivision(最短路树)

题目描述 You are given a graph with n vertices and m undirected edges of length 1. You can do the following operation on the graph for arbitrary times: Choose an edge (u,v) and replace it by two edges, (u,w) and (w,v), where w is a newly inserted vertex.…

【毕业季】九年程序猿有话说

活动地址&#xff1a;毕业季进击的技术er 九年程序猿有话说 勇敢前行&#xff0c;绽放青春&#xff0c;不负韶华&#xff01;选择IT的原因职场新人如何选择工作工作中&#xff0c;如何快速成长工作中用技术做过的最有成就感的事&#xff1f;程序员三十五岁瓶颈你怎么看&#xf…