Spring Cloud学习笔记【初识微服务基础框架搭建】
创始人
2024-06-03 19:39:17
0

文章目录

  • 微服务架构
    • 介绍
    • 架构图
    • 核心组件
  • Spring Cloud版本对应
  • 基础框架搭建
    • 1.建造父工程
    • 2.建造子工程
      • user工程建造
      • auth工程建造
  • RestTemplate 实现微服务远程调用
    • RestTemplate 介绍
    • 配置RestTemplate
    • 测试远程访问
  • 总结

微服务架构

介绍

微服务架构是一种将应用程序拆分成小型、自治的服务的软件设计方法。每个服务都是相对独立的,拥有自己的数据库,部署在自己的容器中,可以使用不同的编程语言和技术栈。通过使用微服务,可以实现更高的可伸缩性、可靠性和灵活性,同时使开发人员能够更快地开发和交付新功能。

架构图

如图是spring官网的spring cloud微服务架构图:
在这里插入图片描述
下面是一个更加详细的具体项目的架构图
在这里插入图片描述

核心组件

在这里插入图片描述
后续将具体学习各个组件,输出代码,开发属于自己的微服务项目脚手架。

Spring Cloud版本对应

使用spring cloud的时候,一定要注意spring cloud和spring boot的版本是有对应关系的,如果版本不一致会有一些bug。
可以通过官方给的网址来获取当前具体的版本对应:https://start.spring.io/actuator/info
在这里插入图片描述
后续版本搭配:
spring cloud H版本
spring boot 2.2.5RELEASE
JDK 8

基础框架搭建

1.建造父工程

在这里插入图片描述
pom引入基本依赖:


4.0.0com.lufeilf-cloud1.0-SNAPSHOT88UTF-81.81.84.121.2.171.16.185.1.471.2.161.3.0org.springframework.bootspring-boot-dependencies2.2.5.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesHoxton.SR1pomimportmysqlmysql-connector-java${mysql.version}com.alibabadruid${druid.version}org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis.spring.boot.version}junitjunit${junit.version}log4jlog4j${log4j.version}org.projectlomboklombok${lombok.version}truelf-cloudorg.springframework.bootspring-boot-maven-plugin2.2.5.RELEASEtruetrue

2.建造子工程

新建一个auth用户授权服务,一个用户信息服务。
简单模拟服务的远程调用
在这里插入图片描述

user工程建造

在这里插入图片描述

pom.xml


lf-cloudcom.lufei1.0-SNAPSHOT4.0.0lf-userorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.mybatis.spring.bootmybatis-spring-boot-startercom.alibabadruid-spring-boot-starter1.1.10mysqlmysql-connector-javaorg.springframework.bootspring-boot-starter-jdbcorg.springframework.bootspring-boot-devtoolsruntimetrueorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtest

application.yml

server:port: 9001spring:application:name: lf-userdatasource:type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包 com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/cloud?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: rootmybatis:mapperLocations: classpath:mapper/*.xmltype-aliases-package: com.lufei.springcloud.domain    

启动类UserApplication

@SpringBootApplication
public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class,args);}}

UserController类,暂时不查数据库,直接返回

@RestController
@RequestMapping("/user")
public class UserController {/*** 获取当前用户信息*/@GetMapping("/info/{username}")public String info(@PathVariable("username") String username){return username + " login success";}}

启动测试可以访问(数据库未配置好可能会有些报错,先不管)
![在这里插入图片描述](https://img-blog.csdnimg.cn/00906326ade54c15873d17b23ab9ad21.png

auth工程建造

pom.xml

org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.springframework.bootspring-boot-devtoolsruntimetrueorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtest

application.yml

server:port: 9002spring:application:name: lf-auth

启动类AuthApplication

@SpringBootApplication
public class AuthApplication {public static void main(String[] args) {SpringApplication.run(AuthApplication.class,args);}}

运行测试确保项目不报错
在这里插入图片描述

RestTemplate 实现微服务远程调用

上述两个简单的子项目项目已经搭建好。
接下来,我们简单模拟下,auth认证服务登录时,远程调用user服务,获取信息成功登录。
我们先用RestTemplate 来实现这一操作

RestTemplate 介绍

RestTemplate是Spring框架提供的一种HTTP客户端工具,用于与RESTful Web服务进行交互。它简化了开发人员使用Java代码发送HTTP请求和处理HTTP响应的过程。
使用RestTemplate,可以轻松地发送GET、POST、PUT、DELETE等HTTP请求,并处理响应。它还支持各种HTTP身份验证、请求头、Cookie等常用的HTTP特性。
RestTemplate的另一个优点是它可以与Spring的各种数据绑定和转换技术(例如Jackson JSON处理器)结合使用,这样您就可以方便地将HTTP响应转换为Java对象。

配置RestTemplate

@Configuration
public class ApplicationContextConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}}

Auth服务controller接口

@RestController
@RequestMapping("/auth")
public class AuthController {@AutowiredRestTemplate restTemplate;public static final String USER_URL = "http://localhost:9001";@PostMapping("login")public String login(@RequestBody String name){return restTemplate.getForObject(USER_URL+"/user/info/"+name,String.class);}}

测试远程访问

如图,9002的授权服务,最终成功访问9001的用户服务
在这里插入图片描述

总结

至此我们已经可以通过RestTemplate 远程调用服务,但是也有一些明显问题:

  • 每次调用服务都需要写这些代码,存在大量的代码冗余
  • 服务地址如果修改,维护成本增高
  • 使用时不够灵活

这些问题就需要通过注册中心动态的对服务注册和服务发现。
下一期继续微服务的注册与发现。

相关内容

热门资讯

很简单个性签名 很简单个性签名大全  随着社交网络和信息技术的迅猛发展,越来越多人喜欢设置个性签名,使用个性签名可以...
最伤感的网名 最伤感的网名  网名指在网上使用的名字。由于网络是一个虚拟的世界,为了避免使用真实姓名带来的麻烦所以...
个性签名伤感 个性签名伤感  感谢你给我的所有伤害,是它们让我真正走向了成熟,个性签名伤感。下面是小编为大家分享的...
唯美的座右铭 唯美的座右铭唯美的座右铭1  1、伟大的心象海洋一样,永远不会封冻。  2、一般青年都是异常真挚、异...
微信励志网名 微信励志网名  微信励志网名(精选265个)  名字的意义在于它可以用来代表一个人,区别于别的人,名...
qq群个性签名 qq群个性签名27句  1、以前美女玩非主流 现在肥猪开始横行了,这都怎么了。  2、比较1下这两条...
简洁的个人伤感签名 简洁的个人伤感签名汇总99条  各种烦躁各种累各种难受各种泪。下面是小编整理的个人伤感签名99条,感...
如何用qq制作个性化动态论坛... 如何用qq制作个性化动态论坛签名  第一步:登录QQ,然后依次点击“开始/个人设置”菜单,打开QQ2...
王者荣耀情侣网名大全 王者荣耀情侣网名大全  王者荣耀情侣网名大全(精选220个)  名字的意义在于它可以用来代表一个人,...
独一无二的霸气个性签名 独一无二的霸气个性签名(精选150句)  随着移动互联网和社交网络的飞速发展,越来越多人喜欢在网上设...
高档大气微信名 高档大气微信名  微信现如今已经成为了我们日常生活的一部分,如果说微信头像是一个人的门面,那么微信名...
幼儿园我的教育故事 爱是真正的老师偶然间,看到一篇文章,题目是《爱是最好的老师》,感觉不错,文章是这样的:“许多年前,有...
抖音网名大全 抖音网名大全  抖音网名大全(精选270个)  名字的意义在于它可以用来代表一个人,区别于别的人,名...
表示后悔的个性签名 表示后悔的个性签名  给我时间,我要努力成为你未来见到会后悔没好好珍惜的人。以下是小编整理的表示后悔...
漾濞石门关 漾濞石门关漾濞石门关漾濞石门关(漾濞石门关)在大理苍山背后的江边,有两座高数百米的断崖峡谷,形如两扇...
猴子捞月亮英文故事   猴子捞月亮的故事十分适合我们儿童睡前听的故事,unjs小编今天就为大家带来猴子捞月亮英文故事,欢...
高士其科普童话 高士其科普童话  高士其原名高仕錤,福州人,生物学家,化学家,著名科普作家。也是《高士其科普童话》一...
关于雷锋无私奉献的小故事大全   雷锋——这个名字在中国人耳中并不陌生,他助人为乐的事迹在中国广为流传,“雷锋出差一千里,好事做了...
晚上哄孩子睡觉的童话小故事 晚上哄孩子睡觉的童话小故事8篇晚上哄孩子睡觉的童话小故事1  小白兔非常喜欢吃胡萝卜,每天小白兔在睡...
童话故事《小红帽》 童话故事《小红帽》  小红帽是德国童话作家格林的童话《小红帽》中的人物。“小红帽”的故事版本多达一百...