微服务框架springcloud(实用篇)【1】SpringCloud

这篇具有很好参考价值的文章主要介绍了微服务框架springcloud(实用篇)【1】SpringCloud。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务框架springcloud(实用篇)【1】SpringCloud微服务框架springcloud(实用篇)【1】SpringCloud微服务框架springcloud(实用篇)【1】SpringCloud微服务框架springcloud(实用篇)【1】SpringCloud微服务框架springcloud(实用篇)【1】SpringCloud

一、认识微服务

随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?

1.单体架构

概念:将业务的所有功能集中在一个项目中开发,打成一个包部署。

微服务框架springcloud(实用篇)【1】SpringCloud

单体架构的优缺点如下:

        优点:架构简单、部署成本低

        缺点:耦合度高(维护困难、升级困难)

2.分布式架构

概念:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。

微服务框架springcloud(实用篇)【1】SpringCloud

分布式架构的优缺点:

        优点:降低服务耦合、有利于服务升级和拓展

        缺点:服务调用关系错综复杂

分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:

        服务拆分的粒度如何界定?

        服务之间如何调用?

        服务的调用关系如何管理?

微服务框架springcloud(实用篇)【1】SpringCloud人们需要制定一套行之有效的标准来约束分布式架构。

3.微服务

架构特征:

        单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责

        自治:团队独立、技术独立、数据独立,独立部署和交付

        面向服务:服务提供统一标准的接口,与语言和技术无关

        隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务框架springcloud(实用篇)【1】SpringCloud

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

因此,可以认为微服务是一种经过良好架构设计的分布式架构方案。

微服务这种方案需要技术框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。在国内最知名的就是SpringCloud和阿里巴巴的Dubbo

其中在Java领域最引人注目的就是SpringCloud提供的方案了。

微服务框架springcloud(实用篇)【1】SpringCloud

4.SpringCloud

SpringCloud是目前国内使用最广泛的微服务框架。

官网地址:https://spring.io/projects/spring-cloud

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。

其中常见的组件包括:

微服务框架springcloud(实用篇)【1】SpringCloud

另外,SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:

微服务框架springcloud(实用篇)【1】SpringCloud

我们课堂学习的版本是 Hoxton.SR10,因此对应的SpringBoot版本是2.3.x版本。

5.总结

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统

分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝

微服务:一种良好的分布式架构方案

        ①优点:拆分粒度更小、服务更独立、耦合度更低

        ②缺点:架构非常复杂,运维、监控、部署难度提高

SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

微服务框架springcloud(实用篇)【1】SpringCloud微服务框架springcloud(实用篇)【1】SpringCloud

二、服务拆分和远程调用

任何分布式架构都离不开服务的拆分,微服务也是一样。

1)微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务
2)微服务可以将业务暴露为接口,供其它微服务使用
3)不同微服务都应该有自己独立的数据库

1.服务拆分原则

微服务拆分时的几个原则:

        不同微服务,不要重复开发相同业务

        微服务数据独立,不要访问其它微服务的数据库

        微服务可以将自己的业务暴露为接口,供其它微服务调用

微服务框架springcloud(实用篇)【1】SpringCloud

2.服务拆分示例

以课前资料中的微服务cloud-demo为例,其结构如下:

微服务框架springcloud(实用篇)【1】SpringCloud

cloud-demo:父工程,管理依赖

        order-service:订单微服务,负责订单相关业务

        user-service:用户微服务,负责用户相关业务

要求:

        订单微服务和用户微服务都必须有各自的数据库,相互独立

        订单服务和用户服务都对外暴露Restful的接口

        订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库

1)导入Sql语句

首先,将课前资料提供的`cloud-order.sql`和`cloud-user.sql`导入到mysql中:

微服务框架springcloud(实用篇)【1】SpringCloud

cloud-user表中初始数据如下:

微服务框架springcloud(实用篇)【1】SpringCloud

/*
 Navicat Premium Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 50622
 Source Host           : localhost:3306
 Source Schema         : heima

 Target Server Type    : MySQL
 Target Server Version : 50622
 File Encoding         : 65001

 Date: 01/04/2021 14:57:18
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '收件人',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 109 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (1, '柳岩', '湖南省衡阳市');
INSERT INTO `tb_user` VALUES (2, '文二狗', '陕西省西安市');
INSERT INTO `tb_user` VALUES (3, '华沉鱼', '湖北省十堰市');
INSERT INTO `tb_user` VALUES (4, '张必沉', '天津市');
INSERT INTO `tb_user` VALUES (5, '郑爽爽', '辽宁省沈阳市大东区');
INSERT INTO `tb_user` VALUES (6, '范兵兵', '山东省青岛市');

SET FOREIGN_KEY_CHECKS = 1;

cloud-order表中初始数据如下:

微服务框架springcloud(实用篇)【1】SpringCloud

cloud-order表中持有cloud-user表中的id字段。

/*
 Navicat Premium Data Transfer

 Source Server         : local
 Source Server Type    : MySQL
 Source Server Version : 50622
 Source Host           : localhost:3306
 Source Schema         : heima

 Target Server Type    : MySQL
 Target Server Version : 50622
 File Encoding         : 65001

 Date: 01/04/2021 14:57:18
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for tb_order
-- ----------------------------
DROP TABLE IF EXISTS `tb_order`;
CREATE TABLE `tb_order`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '订单id',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '商品名称',
  `price` bigint(20) NOT NULL COMMENT '商品价格',
  `num` int(10) NULL DEFAULT 0 COMMENT '商品数量',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 109 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of tb_order
-- ----------------------------
INSERT INTO `tb_order` VALUES (101, 1, 'Apple 苹果 iPhone 12 ', 699900, 1);
INSERT INTO `tb_order` VALUES (102, 2, '雅迪 yadea 新国标电动车', 209900, 1);
INSERT INTO `tb_order` VALUES (103, 3, '骆驼(CAMEL)休闲运动鞋女', 43900, 1);
INSERT INTO `tb_order` VALUES (104, 4, '小米10 双模5G 骁龙865', 359900, 1);
INSERT INTO `tb_order` VALUES (105, 5, 'OPPO Reno3 Pro 双模5G 视频双防抖', 299900, 1);
INSERT INTO `tb_order` VALUES (106, 6, '美的(Midea) 新能效 冷静星II ', 544900, 1);
INSERT INTO `tb_order` VALUES (107, 2, '西昊/SIHOO 人体工学电脑椅子', 79900, 1);
INSERT INTO `tb_order` VALUES (108, 3, '梵班(FAMDBANN)休闲男鞋', 31900, 1);

SET FOREIGN_KEY_CHECKS = 1;

2)导入demo工程

用IDEA导入课前资料提供的Demo:

微服务框架springcloud(实用篇)【1】SpringCloud

项目结构如下:

微服务框架springcloud(实用篇)【1】SpringCloud

导入后,会在IDEA右下角出现弹窗:

微服务框架springcloud(实用篇)【1】SpringCloud

点击弹窗,然后按下图选择:

微服务框架springcloud(实用篇)【1】SpringCloud

会出现这样的菜单:

微服务框架springcloud(实用篇)【1】SpringCloud

配置下项目使用的JDK:

微服务框架springcloud(实用篇)【1】SpringCloud

3)实现远程调用案例

在order-service服务中,有一个根据id查询订单的接口:

微服务框架springcloud(实用篇)【1】SpringCloud

根据id查询订单,返回值是Order对象,如图:

微服务框架springcloud(实用篇)【1】SpringCloud

其中的user为null

在user-service中有一个根据id查询用户的接口:

微服务框架springcloud(实用篇)【1】SpringCloud

查询的结果如图:

微服务框架springcloud(实用篇)【1】SpringCloud

1] 案例需求:

修改order-service中的根据id查询订单业务,要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。

微服务框架springcloud(实用篇)【1】SpringCloud

因此,我们需要在order-service中向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。

大概的步骤是这样的:</文章来源地址https://www.toymoban.com/news/detail-462119.html

到了这里,关于微服务框架springcloud(实用篇)【1】SpringCloud的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud_微服务基础day1(走进微服务,认识springcloud,微服务(图书管理)项目搭建(一))

    官方网站:柏码 - 让每一行代码都闪耀智慧的光芒! (itbaima.net) 注意: 此阶段学习推荐的电脑配置,至少配备4核心CPU(主频3.0Ghz以上)+16GB内存,否则卡到你怀疑人生。 前面我们讲解了SpringBoot框架,通过使用SpringBoot框架,我们的项目开发速度可以说是得到了质的提升。同时

    2024年02月07日
    浏览(53)
  • 微服务【分布式架构&认识微服务&SpringCloud】第1章

    目录 1,认识微服务 1.1,单体架构 1.2,分布式架构 1.3,微服务 1.4,SpringCloud 1.5,总结 💂 个人主页:  爱吃豆的土豆 🤟 版权:  本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 🏆 人

    2023年04月08日
    浏览(56)
  • 详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用

    👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:首期文章 📚订阅专栏:微服务技术全家桶 希望文章对你们有所帮助 在此之前,耗时半个月,我已经将Redis进行了一个原理上的速成以及项目的制作,整个项目我觉得还是很不错的,基本已

    2024年01月18日
    浏览(49)
  • 【微服务 SpringCloud】实用篇 · 服务拆分和远程调用

    微服务(2) 本文将正式进入微服务框架SpringCloud和SpringCloudAlibaba的学习了,他们的工作就是微服务治理 任何分布式架构都离不开服务的拆分,微服务也是一样 服务拆分就是单个模块拆成多个模块,不过模块必须具有一定的独立性,这里我总结了微服务拆分时的几个原则:

    2024年02月08日
    浏览(34)
  • 【微服务 SpringCloud】实用篇 · Ribbon负载均衡

    微服务(4) 在前面,我们添加了@LoadBalanced注解,即可实现负载均衡功能,这是什么原理、什么策略呢? SpringCloud底层其实是利用了一个名为 Ribbon 的组件 ,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1,怎么变成了http://localhost:8081的呢? 为什么我

    2024年02月08日
    浏览(51)
  • SpringCloud微服务 【实用篇】| 统一网关Gateway

    目录 一:统一网关Gateway 1. 为什么需要网关 2. gateway快速入门 3. 断言工厂 4. 过滤器工厂 5. 全局过滤器 6. 跨域问题 前面我们已经学习了注册中心Eureka、Nacos和配置管理中心Nacos;但是此时存在很多安全的问题,服务器摆在那里谁都可以进行访问! 网关功能: ① 身份认证和权

    2024年02月04日
    浏览(43)
  • 【微服务 SpringCloud】实用篇 · Eureka注册中心

    微服务(3) 假如我们的服务提供者 user-service部署了多个实例(不同实例,端口号不一致) ,如图: 大家思考几个问题: 我们刚才的编程,是写死在程序里的,ip和端口都是写死的, 这种硬编码的方式,之后改变ip和端口代码不就没法用了? order-service在发起远程调用的时候

    2024年02月08日
    浏览(40)
  • SpringCloud微服务 【实用篇】| Docker启示录

    目录 一:Docker启示录 1. Docker启示录 2. Docker和虚拟机的区别 3. Docker架构 4. Centos7安装Docker 4.1. 卸载 4.2. 安装docker 4.3. 启动docker 4.4. 配置镜像加速 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的同学可以进行学习人工

    2024年02月04日
    浏览(38)
  • SpringCloud微服务 【实用篇】| Dockerfile自定义镜像、DockerCompose

    目录 一:Dockerfile自定义镜像 1. 镜像结构 2. Dockerfile语法 3. 构建Java项目 二: Docker-Compose 1. 初识DockerCompose 2. 部署微服务集群 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,感兴趣的同学可以进行学习人工智能学习 前面我们怎么拉取镜像,怎么去创

    2024年02月03日
    浏览(44)
  • SpringCloud微服务 【实用篇】| Docker镜像、容器、数据卷操作

    目录 一:Docker基本操作 1. 镜像操作 镜像相关命令 2. 容器操作 容器相关命令 3. 数据卷(容器数据管理) 数据卷 操作数据卷 挂载数据卷 挂载的方式区别 前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,感兴趣的同学可以进行学习人工智能学习 镜像相

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包