浅谈Spring Cloud:认识微服务

news2024/9/25 7:25:29

SpringCloud就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合。

目录

微服务远程调用

Eureka注册中心

搭建Eureka Server

注册组件

服务拉取


当各种各样的服务越来越多,拆分的也越来越细,此时就会出现一个服务集群。

但是这么多服务,只靠人来管理是不现实的,所以引入了注册中心。

但是每个微服务都需要有不同的配置,我们就需要一个配置中心来管理每个服务的配置文件。

但是还需要管理用户的id,访问之类的事情,就需要一个服务网关。

光有了这些,还需要存储数据的数据库,并且还需要搭配分布式的缓存和搜索。

还需要消息队列来管理服务集群之间的通信。

一直到最后,才完成了整个微服务的整体架构。

微服务远程调用

现在我们有两个微服务(此处看做是两个springboot项目,各自有各自的端口和配置,数据库不是公用的,通过父子关系把一些配置公有化了)。我们需要在一个微服务中,把另一个微服务的接口调用到,该怎么做?

这里是有两个数据库,每个微服务只能查询到自己数据库的内容。我们通过Order模块里面的内容是无法查询到User中的信息的。

对于User服务,在Mapper中有一个GetMapper方法,只需要给它发送请求,它就会返回一个信息出来。于是我们就可以在Order中,也给它发送一个这个请求来获得数据库的信息。并且这个请求是解耦的,并不依赖于某个模块。

注册RestTemplate

一般来说,配置类是Controller,此处的Application也可以作为配置类。我们就直接把RestTemplate注册到Spring中。

在Order中,订单查询功能,是没有用户信息的。用户信息在另一个数据库中,此处查询不到。但是,Order中有用户的ID,通过这个ID可以在另一个数据库中查询到我们想要的结果。

通过restTemplate就能直接给另一个接口发送信息,接收到信息后再整合进原来的order中。

Eureka注册中心

在上述的例子中,远程调用的时候,我们的URL是写死的。当更换机器,或者新增机器的时候,这个URL就需要跟着变更。这样就需要通知所有的相关服务去修改。各个项目的配置文件反复更新,各个项目部署非常频繁。

引入Eureka注册中心,就可以帮助我们完成这一系列的操作。

  • EurekaServer:作为注册中心Server端,向微服务应用程序提供服务注册,发现,健康检查等能力。
  • EurekaClient:服务提供者,服务启动时,会向EurekaServer注册自己的信息(IP,端口,服务信息等),Eureka Server 会存储这些信息。

搭建Eureka Server

新建一个模块,并且选择好Maven

在eureka的pom文件中,配置好相关的信息。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

给该项目编写⼀个启动类,并在启动类上添加服务@EnableEurekaServer 注解,开启eureka注册中心。

配置好相关的配置文件。

启动服务,并且可以访问到eureka的网页。红框框就是被注册的组件。

注册组件

针对user-service,我们注册这个组件到Eureka有两个步骤:

引入pom依赖

修改yml配置文件

注意,这里的配置文件修改极其容易出错,请严格注意格式!

对于order-dervice,步骤是一样的。重启服务,在Eureka的网页中就可以看到两个组件被注册成功。

服务拉取

刚刚是两个组件的情况,如果我们想要开两个服务,可以直接在IDEA里面添加。添加完成后,就会有两个只有端口不同的服务在一起。

现在我们通过order-service完成服务拉取,拉取的内容是user-service中的。

 

  1. 修改OrderService的代码,修改访问的url路径,用服务名称代替ip和端口
    String url = "http://userservice/user/" + order.getUserId();
  2. 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注释

这样子,刚刚我们启动的两个UserApplication,会在收到请求的时候通过负载均衡,动态的控制服务器响应给OrderService。

在地址栏快速的访问127.0.0.1:8080/order/101 和 127.0.0.1:8080/order/102  可以发现这两次请求是在不同的实例上完成的。

搭建 Eureka Server

  1. 引入 eureka-server 依赖。
  2. 添加 @EnableEurekaServer 注解。
  3. 在 application.yml 中配置 Eureka 地址。

服务注册

  1. 引入 eureka-client 依赖。
  2. 在 application.yml 中配置 Eureka 地址。

服务发现

  1. 引入 eureka-client 依赖。
  2. 在 application.yml 中配置 Eureka 地址。
  3. 给 RestTemplate 添加 @LoadBalanced 注解。
  4. 用服务提供者的服务名称远程调用。

这就是通过Eureka注册中心完成服务注册的流程了。只有同一个服务多个实例才能做负载均衡。那么具体讲到负载均衡,我们下一章节再详细说~

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

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

相关文章

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux

Ubuntu 22.04.5 LTS (Jammy Jellyfish) - 现代化的企业与开源 Linux Ubuntu 22.04.5 发布&#xff0c;配备 Linux 内核 6.8 请访问原文链接&#xff1a;https://sysin.org/blog/ubuntu-2204/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xf…

Spring Boot与gRPC的完美融合:构建高效用户服务与订单服务通信

gRPC 是一种由 Google 开发的高性能、开源的远程过程调用&#xff08;Remote Procedure Call, RPC&#xff09;框架。它允许在不同的计算机系统或进程之间进行通信&#xff0c;使得分布式系统和微服务架构中的服务之间能够轻松地相互调用方法。gRPC 基于 HTTP/2 协议&#xff0…

21章 规则集和映射

1.同20章 线性表、栈、队列和优先队列的第10题。 2.同20章 线性表、栈、队列和优先队列的第1题。 3.修改程序清单21-7中的程序。如果关键字在注释或者字符串中&#xff0c;则不进行统计。将Java文件名从命令行传递。 import java.io.*; import java.util.Arrays; import jav…

轨道列车舱门检测系统源码分享

轨道列车舱门检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

【Android 13源码分析】WindowContainer窗口层级-3-实例分析

在安卓源码的设计中&#xff0c;将将屏幕分为了37层&#xff0c;不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析&#xff0c;整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

Redis的AOF持久化、重写机制、RDB持久化、混合持久化

1、AOF持久化 1.1.AOF持久化大致过程 概括&#xff1a;命令追加&#xff08;append&#xff09;、文件写入、文件同步&#xff08;sync&#xff09; Redis 每执行一条写操作命令&#xff0c;就把该命令以追加的方式写入到一个文件里&#xff0c;然后重启 Redis 的时候&#…

Pytest配置文件pytest.ini如何编写生成日志文件?

1、新建pytest.ini文件 [pytest] log_clitrue log_leveLNOTSET log_format %(asctime)s %(levelname)s %(message)s %(filename)s %(funcName)s %(lineno)d log_date_format %Y-%m-%d %H:%M:%Slog_file ./logdata/log.log log_file_level info log_file_format %(asctime…

实时(按帧)处理的低通滤波C语言实现

写在前面&#xff1a; 低通滤波采用一般的FIR滤波器&#xff0c;因为本次任务&#xff0c;允许的延迟较多&#xff0c;或者说前面损失的信号可以较多&#xff0c;因此&#xff0c;涉及一个很高阶的FIR滤波器&#xff0c;信号起始段的信号点可以不处理&#xff0c;以及&#xf…

召回01 基于物品是协同过滤 ItemCF

相似度&#xff0c;类似机器学习里面常用的cosine相似度

python AssertionError: Torch not compiled with CUDA enabled

查看&#xff1a;torch import torch# 输出带CPU&#xff0c;表示torch是CPU版本的 print(ftorch的版本是&#xff1a;{torch.__version__}) # print(ftorch是否能使用cuda&#xff1a;{torch.cuda.is_available()}) 修改一下代码&#xff0c;将cuda改成cpu 最后运行正常&…

【React源码解析】深入理解react时间切片和fiber架构

时间切片 假如React一个更新需要耗时200ms&#xff0c;我们可以将其拆分为40个5ms的更新&#xff08;后续会讲到如何拆分&#xff09;&#xff0c;然后每一帧里只花5ms来执行更新。那么&#xff0c;每一帧里不就剩余16.7 - 5 11.7ms的时间可以进行用户事件&#xff0c;渲染等…

13 Midjourney从零到商用·进阶篇:灯光、角度与风格等精细控制方法

在前面我们了解了提示词的书写&#xff0c;那么如何利用提示词来精确控制生成画面的灯光、角度与风格 呢&#xff1f;在本篇文章中我么一起来探讨一下。 一、灯光 在摄影中&#xff0c;对灯光的要求都是非常高的。灯光能对人物、动物、物体、场景等进行修饰。每一种微小的的灯光…

链接升级:Element UI <el-link> 的应用

链接升级&#xff1a;Element UI 的应用 一 . 创建文字链接1.1 注册路由1.2 创建文字链接 二 . 文字链接的属性2.1 文字链接的颜色2.2 是否显示下划线2.3 是否禁用状态2.4 填写跳转地址2.5 加入图标 在本篇文章中&#xff0c;我们将深入探索Element UI中的<el-link>组件—…

本地不能訪問linux的kafka服務

1.本地使用kafka客戶端工具連接kafka服務&#xff0c;提示連接失敗 2. 本地使用telnet ip port命令也失敗 3.查看zookeeper和kafka服務是否正常 ps -ef | grep zookeeper ps -ef | grep kafka 3.關閉操作系統的防火墻(僅限于測試使用) 3.1.禁用防火墙 systemctl stop firew…

先有正态分布,还是先有高斯函数?

正态分布&#xff08;也称为高斯分布&#xff09;是由德国数学家卡尔弗里德里希高斯在研究天文学中的误差分布时提出的。而高斯函数通常指的是正态分布的概率密度函数&#xff0c;它是描述正态分布特性的一个数学表达式。因此&#xff0c;可以明确地说&#xff0c;是先有正态分…

eureka.client.service-url.defaultZone的坑

错误的配置 eureka: client: service-url: default-zone: http://192.168.100.10:8080/eureka正确的配置 eureka: client: service-url: defaultZone: http://192.168.100.10:8080/eureka根据错误日志堆栈打断电调试 出现两个key&#xff0c;也就是defaultZone不支持snake-c…

Vue: watch5种监听情况

目录 一.watch的性质与作用 1.watch 的性质包括&#xff1a; 2.watch 常用于以下场景&#xff1a; 二.监视ref定义的基本类型数据 三.监视ref定义的对象类型数据 四.监视reactive定义的对象类型数据 五.监视ref或reactive定义的对象类型数据中的某个属性 六.监视上述的…

c++题目_【模板】最小生成树Prim

题目描述 这是一道最小生成树Prim的模板题&#xff0c;本题与【模板】最小生成树Kruskal&#xff0c;仅仅只有nn和mm的大小不同 给出一个无向图&#xff0c;求出最小生成树&#xff0c;如果该图不连通&#xff0c;则输出orz 输入 第一行输入2个正整数n,mn,m&#xff0c;代表…

【自然语言处理】实验三:新冠病毒的FAQ问答系统

目录 前言 1.新建data_process.py 1.1导入包并定义功能模块1用来读取问题和答案FAQ的文件 1.2功能模块2&#xff1a;进行问题/问题列表处理&#xff08;正则化&#xff0c;分词&#xff09; 1.3功能模块3&#xff1a;处理输入的问题 1.4功能模块4&#xff1a;计算输入问题与问题…

Java | Leetcode Java题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; class Solution {public boolean canCross(int[] stones) {int n stones.length;boolean[][] dp new boolean[n][n];dp[0][0] true;for (int i 1; i < n; i) {if (stones[i] - stones[i - 1] > i) {return false;}}for (int i 1…