微服务介绍微服务环境搭建

news2025/3/3 5:19:43

一、微服务介绍

从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布 式架构--->SOA架构--->微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。

微服务架构

微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步,它更加强调服务的"彻底拆分"。

 优点:

  • 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展

  • 微服务之间采用Restful等轻量级http协议相互调用

缺点:

  • 分布式系统开发的技术成本高(容错、分布式事务等)

 二、微服务环境搭建

本次是使用的电商项目中的商品、订单、用户为案例进行讲解。

技术选型

maven:3.5.4

数据库:MySQL 5.7

持久层: SpingData Jpa/Mybatis-plus

其他: SpringCloud Alibaba 技术栈

模块设计

springcloud-shop父工程

shop-common 公共模块【实体类】

shop-user 用户微服务 【端口: 807x】

shop-product 商品微服务 【端口: 808x】

shop-order 订单微服务 【端口: 809x】

微服务调用

1.在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单为 例来演示微服务的调用:客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微 服务查询商品的信息。

2.我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者。 在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。

 创建父工程

创建一个maven项目

 创建文件夹

 起名

 配置Maven

 确定后导入改变,接着把src删掉,避免代码位置写错

 在pom.xml文件中添加下面内容

    <!--依赖版本的锁定-->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>

    </dependencyManagement>

三、创建基础模块

 1 创建shop-common 模块,在pom.xml中添加依赖

 

 依赖:

<!--依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.56</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
    </dependencies>

创建Maven项目会自动帮你添加,如果创建Springboot项目则需要自己加,否则会报错

 依赖添加到这,添加完记得导入改变

 2 创建实体类

 用户实体类: 

//用户
@Entity(name = "shop_user")//实体类跟数据表的对应
@Data//不再去写set和get方法
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//数据库自增
    private Integer uid;//主键
    private String username;//用户名
    private String password;//密码
    private String telephone;//手机号
}

 jpa连接数据库使用

 商品:

@Data
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer pid;//主键

    private String pname;//商品名称
    private Double pprice;//商品价格
    private Integer stock;//库存
}

 

 订单:

@Data
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long oid;//订单id

    //用户
    private Integer uid;//用户id
    private String username;//用户名

    //商品
    private Integer pid;//商品id
    private String pname;//商品名称
    private Double pprice;//商品单价

    //数量
    private Integer number;//购买数量
}

四、创建用户微服务

步骤:

1 创建模块 导入依赖

2 创建SpringBoot主类

3 加入配置文件

4 创建必要的接口和实现类(controller service dao)

新建一个shop-user 模块,然后进行下面操作

1 创建pom.xml

 

 

 

 

 

 

依赖: 

<dependencies>
        <!--springboot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--shop-common-->
        <dependency>
            <groupId>com.zking</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

 13到80行全删掉

 

 

 

五、创建商品微服务

 1 创建一个名为shop-product 的模块,并添加springboot依赖

 

然后:Next>Next>Finish 即可

 

 

 13到80行删掉后导入下面依赖:

<dependencies>
        <!--springboot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--shop-common-->
        <dependency>
            <groupId>com.zking</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

 

六、创建订单微服务

 1 创建一个名为shop-order 的模块,并添加springboot依赖

 

 然后:Next>Next>Finish 即可

 13到80行删掉,然后导入下面依赖:

<dependencies>
        <!--springboot-web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--shop-common-->
        <dependency>
            <groupId>com.zking</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

 

 

 

 

因为本次内容不会使用Junit,所以需要把test全部干掉

 

下面还有一个test,一起干掉!

 

 

 

 

 

 

 

 

 

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

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

相关文章

机械原理复习试题及答案

机械原理 一、填空题&#xff1a; 1.机构具有确定运动的条件是机构的自由度数等于 。 2.同一构件上各点的速度多边形必 于对应点位置组成的多边形。 3.在转子平衡问题中&#xff0c;偏心质量产生的惯性力可以用 相对地表示。 4.机械系统的等效力学模型是具有 &#xff0c;其上作…

Word文档中经常会遇到字体间距突然变得很大,怎么处理?

Word文档中经常会遇到字体间距突然变得很大&#xff0c;怎么处理&#xff1f; 目录 Word文档中经常会遇到字体间距突然变得很大&#xff0c;怎么处理&#xff1f; 1、如下图字体间距突然变大。 可能原因一&#xff1a; 1、选中该段文字&#xff0c;鼠标右键选择【段落 】 …

【882. 细分图中的可到达节点】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个无向图&#xff08;原始图&#xff09;&#xff0c;图中有 n 个节点&#xff0c;编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链&#xff0c;每条边之间的新节点数各不相同。 图…

进程替换与复制

目录进程替换基础知识什么是进程替换进程替换函数函数使用execlexeclpexecleexecvexecvpexecve进程替换基础知识 什么是进程替换 进程替换&#xff1a;把当前进程换为其他进程执行。&#xff08;其他进程&#xff1a;创建新进程&#xff0c;生成可执行程序&#xff0c;装在进…

Android 13 Wi-Fi状态机流程及Log分析

本文基于Android 13源码解读,对Wi-Fi状态机调用流程进行梳理,并结合Log进行分析,便于大家理解Wi-Fi模块调用流程。 梳理出Wi-Fi状态机共有如下几种状态: mConnectableState mConnectingOrConnectedState mL2ConnectingState mL2ConnectedState mL3ProvisioningState …

【机器学习项目实战10例目录】项目详解 + 数据集 + 完整源码

前言 大家好&#xff0c;我是阿光。 本专栏整理了《机器学习项目实战10例》&#xff0c;内包含了各种不同的入门级机器学习项目&#xff0c;包含项目原理以及源码&#xff0c;每一个项目实例都附带有完整的代码数据集。 正在更新中~ ✨ &#x1f6a8; 我的项目环境&#xff…

《计算机体系结构量化研究方法第6版》1.4 技术趋势

引入 1、以下五种技术是现代计算机实现所不可或缺的。 &#xff08;1&#xff09;集成电路逻辑技术。晶体管密度每年大约增加35%&#xff0c;相当于每4年翻两番。晶片大小的增长速度比较难以预测&#xff0c;也慢一些&#xff0c;增速为每年10%~ 20%。两者综合起来&#xff0c…

【Linux】CentOS 7安装 MySQL

1. 更改Centos YUM 源 1&#xff09; 备份 yum 源配置文件 &#xff08;在根目录下执行&#xff09; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak2&#xff09;将官方的 yum 源换成阿里的yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo…

Day12--渲染二级和三级分类列表

1.动态渲染右侧的二级分类列表 我的操作&#xff1a; 1》在cate.vue中&#xff1a; 2》效果图&#xff1a; *********************************** *********************************** *********************************** 2.循环渲染右侧二级分类列表的 UI 结构&#xff1…

RabbitMQ快速入门

中间件&消息队列 中间件概述 中间件&#xff08;Middleware&#xff09;是处于操作系统和应用程序之间的软件&#xff0c;也有人认为它应该属于操作系统中的一部分。人们在使用中间件时&#xff0c;往往是一组中间件集成在一起&#xff0c;构成一个平台&#xff08;包括开…

你不能错过的【Python爬虫】测试3(爬取所有内容 + 完整源代码 + 架构 + 结果)

目录 一、主要工具包 以及 版本二、架构展示三、各部分code3.1 yjs.py (重要)3.2 items.py3.3 middlewares.py3.4 pipelines.py3.5 settings.py3.6 start.py四、结果展示一、主要工具包 以及 版本 scrapy:2.7.1版本(这里主要用到的工具包) 二、架构展示 三、各部分code 3…

MySQL体系-日志与MVCC(源码层面)

MySQL 本身具备生产binlog日志的功能&#xff0c;在InnoDB存储引擎中&#xff0c;为了持久性有了redo log,为了原子性和隔离性有了undo log&#xff0c;最终通过redo log undo log 保证了一致性&#xff1b; 我先画一个InnoDB操作流程&#xff0c;先简单的了解下它们的工作机制…

基于S2SH的保险业务管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86467452 主要使用技术 SpringStruts2HibernateJSPJSCSSMysql 功能介绍 本系统旨在为当今的保险行业提供一套综合性的管理系统业务&#xff0c;系统的主要用户为保险的购买者以及系统的管理…

10.实用调试技巧

一、调试 1.调试的定义 调试&#xff08;英语&#xff1a;Debugging / Debug&#xff09;&#xff0c;又称除错&#xff0c;是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。 2.调试的基本步骤 发现程序错误的存在 以隔离、消除等方式对错误进行定位 确定错误产…

Linux系统编程(三)——Linux下的进程

第一篇中总结了系统的环境搭建&#xff0c;第二篇中学习了系统的一些IO函数&#xff0c;接下来就深入到了Linux下的进程线程的实现。 目录 0x01 进程概述 一、进程的信息 二、程序与进程 三、并行与并发 四、进程控制块PCB 0x02 进程状态转换 一、进程的状态 二、进程相…

【C++】哈希-bitset位图与模拟

目录 1.位图 1.1什么是位图 1.2位图的作用 2.bitset应用 2.1bitset构造 2.2bitset成员函数与使用 3.bitset模拟实现 构造函数 set reset test flip count size none,any 1.位图 在前文中我们介绍了哈希的一些内容&#xff0c;接下来我们介绍一个新奇的玩意&am…

回归问题原理

回归问题是一种常见的监督机器学习任务&#xff0c;在很多领域均有广泛应用。其典型应用包括销量预测、库存预测、股票价格预测、天气预测等。本问将讨论线性回归&#xff0c;包括线性回归模型的目标函数&#xff08;损失函数和正则函数&#xff09;、线性回归模型的优化求解、…

【一包通刷】晶晨S905L3A/B_完美AI语音线刷包_打开ADB_ROOT权限

【9.0一包通刷】晶晨S905L3A/B_完美AI语音线刷包_默认打开ADB ROOT权限支持游戏启动_万物互联启动动画 适用型号&#xff1a;M401A、CM311-1a、CM311-1sa、B863AV3.1-M2、B863AV3.2-M、UNT403A、M411A等等&#xff1b; 系统版本&#xff1a;Android9 系统桌面&#xff1a;超…

【机器学习项目实战10例】(五):基于随机森林的假新闻检测项目

💥 项目专栏:【机器学习项目实战10例】 文章目录 一、基于随机森林的假新闻检测项目二、数据集介绍三、导包四、加载数据集五、划分训练集、测试集六、构建模型七、精度测试八、网格搜索一、基于随机森林的假新闻检测项目 在当今时代,传播错误信息已经成为一个真正的问题,…

初试hashlib加密模块

文章目录 一、加密解密基础二、使用hashlib模块实现数据加密(一)加密数据1、编写程序,实现功能2、运行程序,查看结果(二)登录加密校验1、编写程序,实现功能2、运行程序,查看结果一、加密解密基础 二、使用hashlib模块实现数据加密 (一)加密数据 1、编写程序,实现功…