Java学习Day57:碧水金睛兽!(Spring Cloud微服务1.0)

news/2024/11/1 4:33:07/

1.微服务入门

(1).单体架构与分布式架构

单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署
优点: 架构简单、部署成本低 ; 缺点: 耦合度高
项目打包部署到Tomcat,用户直接访问。用户量增加后就多部署几台服务器形成集群。随着互联网发展、一个APP或Web通常都用有相当多的模块,因此出现了 分布式架构
分布式架构: 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点: 降低服务耦合、有利于服务升级拓展 ;

(2).微服务

微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征:
单一职责: 微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
面向服务: 微服务对外暴露业务接口
(由于不同模块部署在不同服务器、无法直接调用)
自治: 队独立、技术独立、数据独立、部署独立
隔离性强: 服务调用做好隔离、容错、降级,避免出现级联问题
(避免某个模块宕机造成影响)

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

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

微服务:一种良好的分布式架构方案
优点: 拆分粒度更小、服务更独立、耦合度更低缺点:架构非常复杂,运维、监控、部署难度提高

2.服务拆分及远程调用

java">1.不同微服务,不要重复开发相同业务
2.微服务数据独立,不要访问其它微服务的数据库
3.微服务可以将自己的业务暴露为接口,供其它微服务调用
1.基于RestTemplate发起的http请求实现远程调用
2.http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

(1).提供者与消费者

服务提供者: 一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者: 一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
一个服务既可以是提供者也可以是消费者,要根据具体的业务和情况来判断

我们服务在请求服务的时候,restTemplate访问的地址是固定的。 可在实际开发中通常都会有好几个环境,开发,测试等等环境。每个环境的地址都在变化 因此出现了几个问题:

1.服务消费者该如何获取服务提供者的地址信息?

2.如果有多个服务提供者,消费者该如何选择?

(2).微服务远程调用Demo

在父模块指定了父 POM

<parent><groupId>org.springframework.boot</groupId><version>3.1.0</version><artifactId>spring-boot-starter-parent</artifactId></parent>
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db2username: rootpassword: 123456
mybatis:type-aliases-package: com.home.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplserver:port: 8088

provider实现controller层,services层,和Mapper层,pojo

java">@RestController
@RequestMapping("/user")
public class userController {@AutowireduserServices userServices;@RequestMapping("/findAll")public usersss findall(){return userServices.findAll();}
}

consumr层只用实现controller层和pojo

java">@RestController
@RequestMapping("/a")
public class usersssController {@AutowiredRestTemplate restTemplate;@RequestMapping("/b")public usersss findAll(){usersss userssses= restTemplate.getForObject("http://localhost:8088/user/findAll",usersss.class);return userssses;}
}
usersss userssses= restTemplate.getForObject("http://localhost:8088/user/findAll",usersss.class);

http://www.ppmy.cn/news/1543489.html

相关文章

一文彻底搞定Redis与MySQL的数据同步

全文目录&#xff1a; 开篇语前言摘要概述数据同步的常见需求 源码解析1. Maven依赖2. 配置文件3. 实体类4. 数据访问层5. 服务层实现数据同步 使用案例分享使用RabbitMQ实现数据同步1. 添加RabbitMQ依赖2. 配置RabbitMQ3. 发送消息4. 消费消息 应用场景案例优缺点分析优点缺点…

数据挖掘(一)

数据挖掘&#xff08;一&#xff09; 文章目录 数据挖掘&#xff08;一&#xff09;亲和性分析示例分类问题的简单示例完整实例 数据挖掘旨在让计算机根据已有数据做出决策。决策可以是预测明天的天气、拦截垃圾邮件、检测网站的语言&#xff0c;或者在约会网站上发现新的恋爱对…

LinkedList和链表(下)

1. 什么是LinkedList 在练习了单链表的自我实现和单链表的一些习题之后,我们正式来认识一下java提供的LinkedList,这是一种双向链表结构,在增删元素的时候效率比较高,不需要像ArrayList一样搬运元素.但是在查找方面效率比较低(需要遍历链表),ArrayList效率就比较高(直接由数组下…

蓝牙MCU蓝牙医疗检测相关案例

英尚蓝牙MCU配套成熟的网络协议栈和丰富的示例代码及多平台APP工具。无需二次开发&#xff0c;即连即用&#xff1b;提供特色蓝牙/串口/USB三通芯片&#xff0c;为更多复杂无线应用赋能。相关产品及技术欢迎咨询。 应用案例说明: • 应用包括血糖仪,血氧仪,血压计,体温计,毒品…

golang gin ShouldBind的介绍和使用

在 Go 语言的 Gin 框架中&#xff0c;ShouldBind 是用于将请求中的数据绑定到结构体的一个方法。它简化了从请求中提取参数的过程&#xff0c;支持多种数据格式&#xff08;如 JSON、表单、查询参数等&#xff09;。以下是 ShouldBind 的介绍和使用示例。 1. 基本概念 Should…

什么是x86架构,什么是arm架构

什么是 x86 架构&#xff1f; x86 架构是一种经典的指令集架构&#xff08;ISA&#xff09;&#xff0c;最早由英特尔在 1978 年推出&#xff0c;主要用于 PC、服务器等领域。 它是一种复杂指令集计算&#xff08;CISC&#xff09;架构&#xff0c;支持大量的复杂指令和操作&…

期货跟单、量化交易模拟演示系统

演示版可直接下载本文绑定资源。 一、跟单下单 在“排行榜”中选择要跟单的用户&#xff0c;合约可以跟全部&#xff0c;也可以指定跟该用户的某一合约操作&#xff0c;选定跟单的倍数&#xff08;操作手数的倍数&#xff09;/手数&#xff08;指定手数&#xff0c;可以不是对…

Endnote如何关联Word,在Word上通过Endnote插入文献

1、Word版本已被激活 首先检查Word版本是否已经被激活&#xff0c;不管是正版还是破解版&#xff0c;未激活状态&#xff08;试用&#xff09;可能会导致关联不成功。如下图所示为已激活版本&#xff0c;在“文件”—“账户”可看。 2、勾选开发工具 其次&#xff0c;打开Wor…