扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容介绍了“微服务开发环境怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联专业为企业提供通川网站建设、通川做网站、通川网站设计、通川网站制作等企业网站建设、网页设计与制作、通川企业网站模板建站服务,十年通川做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
相关文档
SpringCloud官网 https://spring.io/projects/spring-cloud/
关于SpringCloud的分类,根据SpringCloud版本的命名方式的改变可以分为两个阶段:
伦敦地铁站名
在Spring Cloud 2020.0.0版本之前,SpringCloud的所有版本均按照伦敦地铁站站名从A-Z的排序进行命名,如下:
为了便于称呼,一般也都称之为A版本,B版本,F版本和H版本。
SR9,每当SpringCloud解决了一个重大bug就会增加SR版本,SR9就意味着在H版本的基础上解决了九个重大bug
日历化版本
从 Spring Cloud 2020.0.0-M1 开始,Spring Cloud 废除了这种英国伦敦地铁站的命名方式,而使用了全新的 "日历化" 版本命名方式。
什么是日历化版本?
英文名称:Calendar Versioning
日历化版本不是基于任意的数字,而是基于项目的发布日期的版本控制约定,随着时间的推移,版本会越来越好。
Spring Cloud 使用了 YYYY.MINOR.MICRO
的命名规则:
预发布版本的后缀分隔符也从 .
变更为 -
,如:2020.0.0-M1
和 2020.0.0-RC2
命名所示。
使用日历化版本命名方式,可以更清楚的看出当前版本的年份,看到字母、纯数字方式的版本号都不知道自己多久没升级
YYYY:表示 4 位年份;
MINOR:代表一个递增的数字,每年以 0 开始递增;
MICRO:代表版本号后缀,就和之前使用的 .0
类似于 .RELEASE
一样,.2
类似于 .SR2
。
SpringCloud的改变目前来说主要体现在对Netflix套件的支持上,早期SpringCloud主要是封装了Netflix套件实现服务注册发现,负载均衡,熔断等功能,但是随着版本的迭代,由于Netflix停止开源项目的更新,所以SpringCloud开始逐步减少对Netflix套件的支持。简单可以分为以下三个时间阶段:
早期,SpringCloud完全封装Netflix套件,核心功能均有Netflix组件提供
2018年前后,Netflix 公司宣布其核心组件 Hystrix、Ribbon、Zuul 等均进入维护状态。同时Spring Cloud Netflix 项目进入维护模式,并计划在 2020 年废除。
北京时间 2020 年 12 月 22 日深夜,Spring Cloud 2020.0.0
版本正式发布, Netflix 模块的全部移除,并且给出替代组件
根据上述变化,简单来说,H版本和2020版本目前属于一个分界线式的版本,从此开始,SpringCloud弃用Netflix套件,进入一个新的时代,但是对于企业开发而言,现在未必需要立马更新最新版本。
一方面大量项目还是采用Netflix组件进行开发,目前来看并没有替换的必要性。另一方面部分技术并不能完全兼容新版本,例如SpringCloud Alibaba就不能完全兼容新版本。
本次教程以H版本为主进行学习,依然采用Netflix组件进行微服务项目开发,同时也会深入学习SpringCloud Alibaba相关组件,并且根据我司项目实际情况,对认证,分布式事务,分布式锁,分布式日志管理等业务场景进行功能实现讲解
在我看来,本教程作为承上启下的作用,对于广泛采用Netflix组件的企业来说,学习本教程可以快速上手进行开发,对于未来的技术趋势也熟稔于心,可以在合适的时候进行项目的技术迭代。
下个版本的教程,将会推出SpringCloud 2020版本,删除Netflix组件的同时,更加偏向云原生开发
关于SpringCloud版本选择主要考虑的问题就是SpringCloud和SpringBoot的兼容性问题,关于这一点建议严格按照官网文档进行,如下:
版本选择:
SpringCloud Hoxton.SR9
SpringBoot 2.3.5.RELEASE
SpringCloud Alibaba 2.1.2.RELEASE
Java版本 Java8
创建父项目
确认IDEA设置
Maven设置
文件过滤 可以不配置
不显示 .idea 文件夹
父项目 pom文件
4.0.0 com.baizhi microservices-cloud 1.0-SNAPSHOT pom 统一依赖版本 1.8 UTF-8 1.8 1.8 Hoxton.SR9 2.3.5.RELEASE 2.1.2.RELEASE org.springframework.boot spring-boot-dependencies ${spring.boot-version} pom import org.springframework.cloud spring-cloud-dependencies ${spring.cloud-version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring.cloud.alibaba-version} pom import org.springframework.boot spring-boot-maven-plugin
设置跳过单元测试
通过Spring Initializr的方式创建项目
Spring Initializr SpringBoot项目工程脚手架,可以直接创建出来SpringBoot项目,包含application配置文件和启动类等。https://start.spring.io/
类似的脚手架还要Alibaba的Java工程构建工具:https://start.aliyun.com/bootstrap.html
IDEA 整合 Alibaba Java工程脚手架 https://start.aliyun.com/article/initializr/springbootideaplugin
选择通过Spring Initializr的方式创建项目
指定使用Alibaba Java工程脚手架的地址https://start.aliyun.com/
选择依赖创建项目
修改pom文件,继承父项目
修改商品服务的pom文件,如下
4.0.0 cloud-product 0.0.1-SNAPSHOT cloud-product 商品服务 com.baizhi cloud-demo 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine
修改父项目pom文件
在商品服务中创建测试Controller接口
编写application配置文件启动项目
效果如下:
选择通过Spring Initializr的方式创建项目
指定使用Alibaba Java工程脚手架的地址
选择依赖创建项目
修改pom文件,继承父项目
在订单服务中创建测试Controller接口
编写application配置文件启动项目
服务调用:订单服务发请求,请求商品服务,获取响应数据
Java代码怎么发http请求?
HTTPClient Apache
RestTemplate Spring
参考资料:https://mp.weixin.qq.com/s/3MfNWtTfckGr2hG9Ly9OPg
Spring中封装的通过Java代码发送RestFul请求(HTTP)的模板类,内置发送get post delete等请求的方法,在SpringBoot中只要导入spring-boot-starter-web的依赖可以直接使用。
org.springframework.boot spring-boot-starter-web
package com.baizhi.cloudorder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; @SpringBootTest class CloudOrderApplicationTests { @Autowired private RestTemplate restTemplate; private String url = "http://localhost:8081/product/getProductById?id=1"; /** * 发送请求 请求商品服务 * * 商品服务接口地址:http://localhost:8081/product/getProductById */ @Test void contextLoads() { /** * getForObject getForEntity * 参数1 url * 参数2 响应数据的类型的类对象 * 参数3 url参数【可以不要 参数可以直接?拼接】 * * getForObject 返回值是被调用接口的响应数据 * getForEntity 返回值是响应体对象,包含更多的数据:接口响应数据,响应状态码等 */ String result = restTemplate.getForObject(url, String.class); System.out.println(result); ResponseEntityentity = restTemplate.getForEntity(url, String.class); System.out.println(entity.getStatusCode()); System.out.println(entity.getBody()); } @Test void test1() { // 通过map封装参数 Map map = new HashMap(); map.put("id",1); String result = restTemplate.getForObject( "http://localhost:8081/product/getProductById?id={id}", String.class, map ); System.out.println(result); } }
最后商品服务通过RestTemplate调用订单服务
“微服务开发环境怎么配置”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流