SpringCloud01——项目演变、微服务远程调用三种方式、springcloud介绍、nacos注册中心

目录

一、项目架构演变过程

1、单体应用架构

2、垂直应用架构

3、分布式服务架构

4、流动计算架构(SOA架构)

5、微服务架构

二、如何实现微服务远程调用

1、HttpClient工具类(springboot中)

形式1:调用第三方的公开服务

形式2:创建两个微服务,两个服务之间进行远程服务调用

2、RestTemplate工具类(springboot中)

3、openFeign组件(springcloud中)

三、微服务架构的实现方式

1、dubbo(都是java语言开发的)

2、springcloud(不限制语言)

四、SpringCloud的简介

4.1初识SpringCloud

4.2 为什么使用SpringCloud

4.3 SpringCloud相关组件(框架)

五、nacos注册中心

1、搭建nacos注册中心

2、注册微服务到nacos注册中心


一、项目架构演变过程

1、单体应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此

时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。

缺点:1、性能扩展比较难 2、协同开发问题 3、不利于升级维护

2、垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个

应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

通过切分业务来实现各个模块独立部署降低了维护和部署的难度,团队各司其职更易管

理,性能扩展也更方便,更有针对性。

缺点:公用模块无法重复利用,开发性的浪费

3、分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐

形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务

复用及整合的分布式服务框架是关键。

4、流动计算架构(SOA架构)

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中

心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调

度和治理中心(SOA)[Service Oriented Architecture]是关键

5、微服务架构

微服务架构的特点

单一职责:微服务架构中每一个服务(模块项目)都对应唯一的业务能力,做到单一职责

:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。

面向服务:面向服务是说每个服务都要对外暴露Restful风格服务接口API。并不关心服务的

技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Restful的接口即可。

自治:自治是说服务间互相独立,互不干扰

  • 团队独立:每个服务都是一个独立的开发团队,人数不能过多。
  • 技术独立:因为是面向服务,提供Restfule接口,使用什么技术没有别人干涉
  • 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动段开发不同接口
  • 数据库分离:每个服务都使用自己的数据源
  • 部署独立,服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护

二、如何实现微服务远程调用

1、HttpClient工具类(springboot中)

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId>
</dependency>

形式1:调用第三方的公开服务

package com.hl.web;
​
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
import java.io.IOException;
​
@RestController
public class HelloController {@RequestMapping("/hello")public Object hello() throws IOException {//发起网络请求,调用百度接口//1、构建一个HttpClient对象CloseableHttpClient client = HttpClientBuilder.create().build();//2、封装一个httpGet 或者 post请求HttpGet request = new HttpGet("http://www.baidu.com");//3、发起网络请求,获取响应对象CloseableHttpResponse response = client.execute(request);//4、解析响应结果Integer code = response.getStatusLine().getStatusCode();System.out.println("响应状态码:"+code);HttpEntity entity = response.getEntity();return EntityUtils.toString(entity);}
}

形式2:创建两个微服务,两个服务之间进行远程服务调用

http://localhost:8081/user/info

@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/info")public User info(){return new User(1,"admin");}
}
@RequestMapping("/info")
public Object info() throws IOException {//发起网络请求,调用百度接口//1、构建一个HttpClient对象CloseableHttpClient client = HttpClientBuilder.create().build();//2、封装一个httpGet 或者 post请求HttpGet request = new HttpGet("http://localhost:8081/user/info");//3、发起网络请求,获取响应对象CloseableHttpResponse response = client.execute(request);//4、解析响应结果Integer code = response.getStatusLine().getStatusCode();System.out.println("响应状态码:"+code);HttpEntity entity = response.getEntity();String s = EntityUtils.toString(entity);User user = JSONObject.parseObject(s,User.class);return user;
}

2、RestTemplate工具类(springboot中)

@SpringBootApplication
public class ProjectAApplication {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}
@RestController
public class HelloController {@Autowiredprivate RestTemplate restTemplate;
​@RequestMapping("/getUser")public User getUser(){return restTemplate.getForObject("http://localhost:8081/user/info", User.class);}
}

3、openFeign组件(springcloud中)

三、微服务架构的实现方式

1、dubbo(都是java语言开发的)

有Alibaba研发,后转给apache维护。

2、springcloud(不限制语言)

spring组织提供的。 http协议远程调用

四、SpringCloud的简介

4.1初识SpringCloud

微 服 务 是 一 种 架 构 方 式 , 最 终 肯 定 需 要 技 术 架 构 去 实 施 。
微 服 务 的 实 现 方 式 很 多 , 但 是 最 火 的 莫 过 于 Spring Cloud了 。 为 什 么 ?

  • 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大。
  • 技术强:Spring作为Java领域的前辈,可以说是功力深厚。有强力的技术团队支撑,一般人还真比不了
  • 群众基础好:可以说大多数程序员的成长都伴随着Spring框架,试问:现在有几家公司开发不用Spring?SpringCloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方,熟悉的味道。
  • 使用方便:相信大家都体会到了SpringBoot给我们开发带来的便利,而SpringCloud完全支持SpringBoot的开发,用很少的配置就能完成微服务框架的搭建

4.2 为什么使用SpringCloud

  • SpringCloud是Spring旗下的项目之一,官网地址:http://projects.spring.io/spring-cloud/
  • Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。
  • SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。

4.3 SpringCloud相关组件(框架)

  • Eureka:服务治理组件,包含服务注册中心,服务注册与发现机制的实现。(服务治理,服务注册/发现) ,类似的产品还有Consul、Nacos
  • Spring Cloud GateWay:网关组件,提供智能路由,访问过滤功能 ,类似产品还有Zuul
  • Ribbon:客户端负载均衡的服务调用组件(客户端负载均衡)
  • Feign:服务调用,给予Ribbon和Hystrix的声明式服务调用组件 (声明式服务调用) (发送Http请求访问)
  • Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和故障提供强大的容错能力。(熔断、断路器,容错)

nacos注册中心

loadBalancer

openFeign

gateway

nacos配置中心

sentinel

五、nacos注册中心

1、搭建nacos注册中心

下载解压缩到非中文目录

启动nacos服务(默认集群模式启动)

以单机版模式启动服务
​startup.cmd -m standalone

http://localhost:8848/nacos/

用户名nacos 密码nacos

2、注册微服务到nacos注册中心

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient //启用服务发现组件的客户端
public class ProjectCApplication {
​public static void main(String[] args) {SpringApplication.run(ProjectCApplication.class, args);}
​
}
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
#当前项目在nacos注册中心暴漏的服务名
spring.application.name=projectC
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
# 应用服务 WEB 访问端口
server.port=8082

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

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

相关文章

Oracle 和 MySQL 中的日期类型比较

Oracle 和 MySQL 都提供了多种日期和时间数据类型&#xff0c;但它们在实现和功能上有一些差异。以下是两者的主要日期类型对比&#xff1a;Oracle 日期类型DATE存储日期和时间&#xff08;精确到秒&#xff09;格式&#xff1a;YYYY-MM-DD HH24:MI:SS示例&#xff1a;TO_DATE(…

基于 Redis 实现共享 Session 登录的多种方法与实践

全文目录&#xff1a;开篇语**前言****1. 什么是共享 Session 登录&#xff1f;****2. 基于 Redis 实现共享 Session 的基本方法****2.1 通过 Redis 存储 Session 数据****2.1.1 基本流程****2.1.2 示例代码&#xff08;Java Spring Boot Redis&#xff09;****3. 使用 Redis…

spring cloud + easyRules 零基础搭建智能规则引擎

你是否曾想过在项目中嵌入一套轻量级且高度可扩展的规则引擎&#xff0c;轻松实现动态化的业务决策&#xff1f;在金融、电商、政务等领域&#xff0c;风险控制是业务安全的核心。传统硬编码方式很难应对复杂多变的风控需求&#xff0c;而规则引擎允许我们将这些规则独立出来&a…

AI应用:电路板设计

Diode Computers 公司 Diode Computers是一家专注于利用AI技术进行定制电路板设计和制造的公司&#xff0c;提供从概念到量产的全流程服务。其核心优势在于将电路板设计转化为AI可理解的代码形式&#xff0c;大幅提升设计效率并降低传统EDA工具的使用门槛 0。 核心服务 设计与制…

RocketMQ学习系列之——客户端消息确认机制

一、客户端使用MQ基本代码示例1、添加maven依赖<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>5.3.0</version> </dependency>2、生产者代码示例public class Produc…

[leetcode] 组合总和

39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; i class Solution {int aim;vector<vector<int>> ret;vector<int> path; public:vector<vector<int>> combinationSum(vector<int>& nums, int target) {aim target;dfs(nums…

新能源行业B端极简设计:碳中和目标下的交互轻量化实践

新能源行业B端极简设计&#xff1a;碳中和目标下的交互轻量化实践内容摘要在新能源行业&#xff0c;碳中和目标正推动着企业追求更高的运营效率和更低的资源消耗。然而&#xff0c;传统的B端交互设计往往复杂繁琐&#xff0c;不仅增加了用户的操作成本&#xff0c;还可能导致资…

减速机:自动化生产线的“精密传动心脏”

减速机作为自动化生产线的核心传动部件&#xff0c;通过调节转速与扭矩实现设备精准控制&#xff0c;其在自动化生产线中发挥着关键作用。以下是其具体应用方式&#xff1a;输送线驱动在自动化生产线中&#xff0c;输送线用于运输物料、半成品或成品&#xff0c;通过减速机可以…

从0到1学PHP(五):PHP 数组:高效存储与处理数据

目录一、数组的定义与分类1.1 索引数组1.2 关联数组1.3 多维数组二、数组的基本操作2.1 数组元素的添加、删除、修改和访问2.2 数组指针的操作三、数组处理函数3.1 数组排序函数3.2 数组统计函数3.3 数组过滤与转换函数一、数组的定义与分类 在 PHP 中&#xff0c;数组是一种非…

vscode 字体的跟换

打开vscode 左下角输入电脑中已经有的字体&#xff1a;有想要用的可以自己进行安装刷新这样就可改变了

墨者:SQL过滤字符后手工注入漏洞测试(第3题)

1. 墨者学院&#xff1a;SQL过滤字符后手工注入漏洞测试(第3题)&#x1f680; 因为练习过太多的sql注入&#xff0c;废话不多介绍&#xff0c;我会通过围绕手动注入和工具爆破的方式达到靶场目标&#xff0c;开练&#xff01;&#xff01;&#xff01; 2. 手工注入方式&#x1…

【Spring AI实战】实现仿DeepSeek页面对话机器人(支持多模态上传)

一、前言 二、实现效果 三、代码实现 3.1 后端代码 3.2 前端代码 一、前言 Spring AI详解&#xff1a;【Spring AI详解】开启Java生态的智能应用开发新时代(附不同功能的Spring AI实战项目)-CSDN博客 二、实现效果 可上传图片或音频数据给大模型分析 三、代码实现 3.1 后…

Vue 正在热映模块

Vue 渐进式JavaScript 框架 基于Vue2的移动端项目&#xff1a;正在热映模块 目录 正在热映 数据修改 导入axios 配置反向代理 正在热映渲染 赋值数据 渲染列表 显示图片 优化列表 设置列表样式 主演 定义过滤器 使用过滤器 主演过长处理 无主演情况处理 观众评…

阿里云上进行k8s集群的配置

在阿里云容器服务Kubernetes&#xff08;ACK&#xff09;中配置集群的核心步骤可分为以下六大关键环节&#xff0c;涵盖架构设计到运维管理&#xff1a;1. 集群规划与基础配置 集群类型选择 托管版&#xff1a;Master节点由阿里云托管&#xff08;推荐生产环境&#xff09;专有…

页面性能优化

优化点解决方案效果双向绑定数量过多竞对设置单元格内部涉及双向绑定的输入组件过多&#xff0c;线上页面最多有88个该和抽屉中的编辑表格一样的组件&#xff0c;共计930个&#xff08;按每行最少6个来计算的&#xff09;双向绑定的组件&#xff0c;严重拖累页面性能。数据计算…

详细说明零拷贝

详细说明零拷贝【一】零拷贝介绍【1】说明【2】为什么需要零拷贝&#xff1f;—— 传统数据传输的问题【3】零拷贝的核心优化【4】零拷贝的实现方式&#xff08;1&#xff09;mmap&#xff08;内存映射&#xff09;&#xff08;2&#xff09;sendfile&#xff08;Linux 系统调用…

docker部署自己写的c++http服务器教程

我用的是ubuntu 22.04环境下 qt c 写的应用程序&#xff0c;是终端程序&#xff0c;不是界面&#xff0c;然后用linuxdeployqt工具将其打包成了AppImage可执行文件&#xff0c;以上是部署前的准备工作&#xff0c;需要确保AppImage可执行文件在自己的ubuntu上可以运行才能执行以…

Caffeine 缓存库的常用功能使用介绍

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

C# _列表(List<T>)_ 字典(Dictionary<TKey, TValue>)

目录 列表&#xff08;List&#xff09;特点 创建列表 RemoveAll 删除与之条件相匹配的数据 会返回删除的个数 Capacity 获取或设置列表的容量 更多方法可参照上篇文章&#xff1a;C#_ArrayList动态数组 字典&#xff08;Dictionary&#xff09;特点 定义一个字典 向字…

【实时Linux实战系列】实时网络控制与调度

在实时控制系统中&#xff0c;网络调度是确保实时数据流传输和处理不受延迟影响的关键。实时网络控制与调度技术对于工业自动化、金融交易、多媒体流等领域至关重要。通过合理设计网络调度策略&#xff0c;可以显著提高系统的实时性和可靠性。本文将介绍如何在实时控制系统中实…