浅谈Spring Cloud:认识微服务

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.mzph.cn/diannao/54474.shtml

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

相关文章

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

MySQL高阶1919-兴趣相同的朋友

题目 请写一段SQL查询获取到兴趣相同的朋友。用户 x 和 用户 y 是兴趣相同的朋友&#xff0c;需满足下述条件&#xff1a; 用户 x 和 y 是朋友&#xff0c;并且用户 x and y 在同一天内听过相同的歌曲&#xff0c;且数量大于等于三首. 结果表 无需排序 。注意&#xff1a;返…

常见排序(C语言版)

1.排序的概念及其应用 1.1排序的概念 排序&#xff1a;​ 在计算机科学与数学中&#xff0c;一个排序算法&#xff08;英语&#xff1a;Sorting algorithm&#xff09;是一种能将一串资料依照特定排序方式排列的算法。 稳定性&#xff1a;假定在待排序的记录序列中&#xff…

聚观早报 | 小米三折叠手机专利曝光;李斌谈合肥投资蔚来

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 9月20日消息 小米三折叠手机专利曝光 李斌谈合肥投资蔚来 索尼PS5 Pro包装亮相 新一代Spectacles AR眼镜发布 通…

《AI系统:原理与架构》于华为HC大会2024正式发布

2024年9月21日&#xff0c;《AI系统&#xff1a;原理与架构》新书发布会在上海世博馆华为HC大会顺利举办。本书由华为昇腾技术专家、B站AI科普博主ZOMI酱和哈工大软件学院副院长苏统华教授联合编写&#xff0c;是领域内AI系统方面填补空白的重磅之作。 发布会上&#xff0c;《A…

Spring:项目中的统一异常处理和自定义异常

介绍异常的处理方式。在项目中&#xff0c;都会进行自定义异常&#xff0c;并且都是需要配合统一结果返回进行使用。 1.背景引入 &#xff08;1&#xff09;背景介绍 为什么要处理异常&#xff1f;如果不处理项目中的异常信息&#xff0c;前端访问我们后端就是显示访问失败的…

JavaScript发送邮件:实现前端触发的教程?

JavaScript发送邮件的方式&#xff1f;怎么使用JavaScript发信&#xff1f; 无论是用户反馈、联系表单还是自动通知&#xff0c;前端触发的邮件发送功能都能极大地提升用户体验。AokSend将详细介绍如何通过JavaScript发送邮件&#xff0c;实现前端触发的邮件发送功能。 JavaS…

跨站请求伪造(CSRF)漏洞详解

免责申明 本文仅是用于学习检测自己搭建的DVWA靶场环境有关CSRF的原理和攻击实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法…

ubuntu24安装vivado24(安装并解决若干错误)

目录 安装方法&#xff1a;问题1&#xff1a;解决办法&#xff1a; 问题2&#xff1a;解决方法&#xff1a; 安装完成&#xff1a; 安装方法&#xff1a; 注意&#xff1a;内存最好预留80G空闲的。 安装好大小&#xff1a; 安装依赖库&#xff1a; sudo apt-get update sud…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端&#xff0c;使用Qt实现客户端&#xff0c;VS实现服务端 Qt创建项目 Qt文件类型 .pro文件&#xff1a;配置文件&#xff0c;决定了哪些文件参与编译&#xff0c;怎样参与编译 .h .cpp .ui&#xff1a;画图文件 Qt编码方式 Qt使用utf-8作为编码方…

鸿蒙 WebView 如何 Debug

前置&#xff1a; hdc chrome //----------------------------------------------------------------------------------------------- hdc shell cat /proc/net/unix | grep devtools 0: 00000002 0 10000 1 1 81134005 webview_devtools_remote_62479exit执行&…

vulnhub(12):bob 1.0.1(gpg文件解密)

端口 nmap主机发现 nmap -sn 192.168.72.0/24 ​ Nmap scan report for 192.168.72.169 Host is up (0.00020s latency). ​ 169是新出现的机器&#xff0c;他就是靶机 nmap端口扫描 nmap -Pn -sV 192.168.72.169 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nmap…

STL简介

在了解了C中的类和对象以及内存管理基本的知识后接下来我们将进入STL的学习&#xff0c;在此我们在本篇会先了解STL的由来以及大致了解STL的组成&#xff0c;接下来在之后的篇章中我将依次来学string、vector等&#xff0c;学习完STL之后相信你会进一步了解C的魅力所在。接下来…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0917)

七、引入 element-ui 组件库 我的Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 官方文档&#xff1a; https://element-plus.org/zh-CN/ 安装 $ pnpm add element-plus自动按需&#xff1a; 安装插件 pnpm add -D unplugin-vue-components unplugin-auto…

机器翻译之Bahdanau注意力机制在Seq2Seq中的应用

目录 1.创建 添加了Bahdanau的decoder 2. 训练 3.定义评估函数BLEU 4.预测 5.知识点个人理解 1.创建 添加了Bahdanau的decoder import torch from torch import nn import dltools#定义注意力解码器基类 class AttentionDecoder(dltools.Decoder): #继承dltools.Decoder写…

元学习的简单示例

代码功能 模型结构&#xff1a;SimpleModel是一个简单的两层全连接神经网络。 元学习过程&#xff1a;在maml_train函数中&#xff0c;每个任务由支持集和查询集组成。模型先在支持集上进行训练&#xff0c;然后在查询集上进行评估&#xff0c;更新元模型参数。 任务生成&…

3DMAX乐高积木插件LegoBlocks使用方法

3DMAX乐高积木插件LegoBlocks&#xff0c;用户可以通过控件调整和自定义每个乐高积木的外观和大小。 【适用版本】 3dMax2009或更高版本&#xff08;不仅限于此范围&#xff09; 【安装方法】 3DMAX乐高积木插件无需安装&#xff0c;使用时直接拖动插件脚本文件到3dMax视口中…

NLP 主要语言模型分类

文章目录 ngram自回归语言模型TransformerGPTBERT&#xff08;2018年提出&#xff09;基于 Transformer 架构的预训练模型特点应用基于 transformer&#xff08;2017年提出&#xff0c;attention is all you need&#xff09;堆叠层数与原transformer 的差异bert transformer 层…

Packet Tracer - 配置编号的标准 IPv4 ACL(两篇)

Packet Tracer - 配置编号的标准 IPv4 ACL(第一篇) 目标 第 1 部分&#xff1a;计划 ACL 实施 第 2 部分&#xff1a;配置、应用和验证标准 ACL 背景/场景 标准访问控制列表 (ACL) 为路由器 配置脚本&#xff0c;基于源地址控制路由器 是允许还是拒绝数据包。本练习的主要内…

leetcode练习 二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3提示&#xff1a; 树中节点的数量在 [0, 104] 区间内。-100 …