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

SpringCloud系列篇:核心组件之注册中心组件

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于SpringCloud的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.注册中心组件是什么

二.注册中心组件的详解 

生活例子

例子分析

三. 代码演示注册中心组件的特点

1.依赖引入

(1)pom

(2)yml

①消费者

②生产者

2.生产者

启动类

controller

3.消费者

启动类

controller


上篇我详细的讲解了SpringCloud到底是什么,也通过生活中的例子去生动说明了,大家如果对于SpringCloud还是又疑问的话,可以看一下上一篇博文

那么这篇我就来详述一下SpringCloud中的核心组件--注册中心组件,也还是会结合生活例子来说明,这样也利于理解。

一.注册中心组件是什么

        注册中心是一种分布式系统中的组件,用于管理服务实例的注册和发现。在微服务架构中,服务可以被拆分成多个小的模块,这些模块可能部署在不同的主机和容器中。因此,为了让一个服务可以访问其他服务,它需要知道其他服务的地址和端口信息。而注册中心就是用来管理这些信息的。

        注册中心组件通常提供以下功能:

  1. 服务注册:服务提供者将自己的服务注册到注册中心中,包括服务名称、IP地址、端口号等信息。
  2. 服务发现:服务消费者从注册中心中查询可用的服务列表,并选择一个可用的服务进行调用。
  3. 服务健康检查:注册中心能够检测服务是否健康,及时剔除不健康的服务实例,避免服务调用失败。
  4. 负载均衡:注册中心可以根据一定的负载均衡策略,为服务消费者选择一个合适的服务实例进行调用。

二.注册中心组件的详解 

      如果只是说注册中心组件的定义,感觉太官方了,脑海中不能出现一个画面感,所以我这里按照自己的理解,给大家举一个通俗易懂的例子


生活例子

假设你需要看病

你去了一家大型医院

这个医院有很多个科室(类似于微服务)

...

每个科室都提供不同的医疗服务。你需要看的是内科,但是你不知道内科是在哪个楼层、哪个区域。这个时候你通常会找到导诊台,去询问内科位于哪个楼层的哪个区域

然后导诊台中的工作人员便会去告诉你具体的位置


例子分析

例子中的导诊台就相当于注册中心的这个组件,导诊台中管理着这个医院各个科室的信息,注册中心组件中管理着其他服务的地址和端口信息。有了导诊台,我们看病就不需要在整个医院中无脑寻找对应科室了,同样的,有了注册中心的组件,我们也不需要在整个服务中去寻找对应的服务。这样就可以节省很多的时间,提高效率。

三. 代码演示注册中心组件的特点

这里写的代码就是一个生产者拿取消费者中返回回来的信息【水蜜桃】

1.依赖引入

(1)pom

这里写一个module代表生产者,一个module代表消费者。其中也需要引入依赖,两个module中肯定有相同的依赖,那么我们可以把整个两个module都写在同一个maven项目下,

然后再把相同的依赖放在那个大项目中,如果两个module有用到其他的依赖,则可以直接在自身的pom文件中引入相应依赖。

父项目的依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 项目组织ID --><groupId>org.example</groupId><!-- 项目名称 --><artifactId>cloud</artifactId><!-- 项目版本号 --><version>1.0-SNAPSHOT</version><!-- 项目打包方式 --><packaging>pom</packaging><!-- 项目模块 --><modules><module>provider</module><module>consumer</module></modules><!-- 项目属性 --><properties><!-- Spring Boot版本号 --><spring-boot.version>2.7.8</spring-boot.version><!-- Spring Cloud版本号 --><spring-cloud.version>2021.0.3</spring-cloud.version><!-- Spring Cloud Alibaba版本号 --><spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version></properties><!-- 项目依赖 --><dependencies><!-- Spring Boot测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Cloud Alibaba Nacos服务发现依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Spring Cloud OpenFeign依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- Spring Cloud LoadBalancer依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency></dependencies><!-- 依赖管理 --><dependencyManagement><dependencies><!-- Spring Boot依赖管理 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- Spring Cloud依赖管理 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- Spring Cloud Alibaba依赖管理 --><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>

其中也需要在整个父项目中说明自己的子模块

相应的,子模块中也需要指明自己的父项目【因为需要用到父项目中的依赖】

(2)yml

①消费者
server:port: 8082
spring:cloud:nacos:discovery:server-addr: localhost:8848application:name: consumer
②生产者
server:port: 8081
spring:cloud:nacos:discovery:server-addr: localhost:8848application:name: provider

2.生产者

启动类

package com.provider.main;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication // 使用@SpringBootApplication注解,表示这是一个Spring Boot应用
@EnableDiscoveryClient // 使用@EnableDiscoveryClient注解,启用服务发现功能
public class ProviderApplication { // 定义主类为ProviderApplicationpublic static void main(String[] args) { // 定义主方法SpringApplication.run(ProviderApplication.class, args); // 运行Spring Boot应用,传入当前类和命令行参数}}

controller

package com.provider.main;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class TestController {// 使用@RequestMapping注解,指定该处理方法对应的URL路径为"/hello"@RequestMapping("/hello")public String hello() {// 返回一个字符串"return "我吃🍑🍑";}}

3.消费者

启动类

package com.consumer.main;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication // 启动类,包含@SpringBootConfiguration和@EnableAutoConfiguration注解
@EnableDiscoveryClient // 启用服务发现功能
public class ConsumerApplication {// 使用@LoadBalanced注解,表示该Bean会被负载均衡器管理@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate(); // 创建并返回一个RestTemplate实例}public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args); // 运行消费者应用,传入当前类和命令行参数}}

controller

package com.consumer.main;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;// 使用@RestController注解,表示这是一个处理HTTP请求的控制器类
@RestController
public class TestController {// 使用@Autowired注解,将RestTemplate实例注入到当前类中@Autowiredprivate RestTemplate restTemplate;// 使用@RequestMapping注解,指定该处理方法对应的URL路径为"/get_hello"@RequestMapping("/get_hello")public String get_hello() {// 使用restTemplate的getForObject方法,向"http://provider/hello"发送GET请求,并将响应结果转换为String类型return restTemplate.getForObject("http://provider/hello", String.class);}}

如果我们没有用到注册中心,那么我们在消费者中需要拿到生产者的数据,就必须要将请求它的那个路径写明白

这样写其实会非常麻烦,我这里为了演示,所以就只写了一个,那么如果是在实际项目中呢?会有许多的服务,那么我们每一个都需要给他写的很详尽,如果有一天这个请求的路径变了,不在localhost中,或者是请求的这个hello变了,那我们还需要找到对应的调用它的那些地方去修改,总之就是非常的麻烦。这里我用到的注册中心的组件是阿里的nacos。

只要我们引入相应的依赖

<!-- Spring Cloud Alibaba Nacos服务发现依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
server:port: 8082
spring:cloud:
#nacos依赖nacos:discovery:server-addr: localhost:8848application:name: provider

并且下载nacos这个软件

nacos下载地址icon-default.png?t=N7T8https://nacos.io/zh-cn/docs/what-is-nacos.html

解压之后运行就可以使用它啦

它的访问路径是8848/nacos

首次进入需要登录,默认账户和密码都是nacos

使用了nacos之后,我们的服务都会被他管理,这样我们就只需要填写相应的服务名,它就会帮我们去找对应的服务了

运行之后也是可以拿到里面的数据的

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊 

相关文章:

  • 大津法(OTSU)点云强度信息分割
  • 安装jupyter notebook,jupyter notebook的简单使用
  • 橘子学K8S03之容器的理解
  • Android aar打包集成问题处理合集
  • 2023年12 月电子学会Python等级考试试卷(四级)答案解析
  • 【CSS】文字描边的三种实现方式
  • 微信小程序封装vant 下拉框select 单选组件
  • 在IDEA中使用git分支进行开发然后合并到Master分支,2022.1.x版本
  • 【IPC通信--socket套接字--心跳包】
  • webpack配置入门
  • vue2 element 弹出框拖拽会出现一层阴影问题
  • MidTool图文创作-GPT-4与DALL·E 3的结合
  • 互联网分布式应用之SpringCloud
  • JavaWeb——新闻管理系统(Jsp+Servlet)之jsp新闻查询
  • Linux离线安装MySQL(rpm)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【comparator, comparable】小总结
  • JavaScript设计模式系列一:工厂模式
  • Java小白进阶笔记(3)-初级面向对象
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Laravel Telescope:优雅的应用调试工具
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • opencv python Meanshift 和 Camshift
  • Redis学习笔记 - pipline(流水线、管道)
  • 关于springcloud Gateway中的限流
  • 力扣(LeetCode)357
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 手写一个CommonJS打包工具(一)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一份游戏开发学习路线
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​插件化DPI在商用WIFI中的价值
  • ​力扣解法汇总946-验证栈序列
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #if #elif #endif
  • #pragma预处理命令
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (八)Flask之app.route装饰器函数的参数
  • (分布式缓存)Redis持久化
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十六)Flask之蓝图
  • (数据结构)顺序表的定义
  • (算法设计与分析)第一章算法概述-习题
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转载)从 Java 代码到 Java 堆
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET Core 中的路径问题
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .sh