微服务开发环境怎么配置

63次阅读
没有评论

共计 6607 个字符,预计需要花费 17 分钟才能阅读完成。

本篇内容介绍了“微服务开发环境怎么配置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

微服务开发环境准备 SpringCloud 版本

相关文档

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 带来了什么样的改变呢?

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 文件

?xml version= 1.0  encoding= UTF-8 ? 
 project xmlns= http://maven.apache.org/POM/4.0.0 
 xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance 
 xsi:schemaLocation= http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd 
  modelVersion 4.0.0 /modelVersion 
  groupId com.baizhi /groupId 
  artifactId microservices-cloud /artifactId 
  version 1.0-SNAPSHOT /version 
  packaging pom /packaging 
  description 统一依赖版本 /description 
  properties 
  java.version 1.8 /java.version 
  project.build.sourceEncoding UTF-8 /project.build.sourceEncoding 
  maven.compiler.source 1.8 /maven.compiler.source 
  maven.compiler.target 1.8 /maven.compiler.target 
 !--  版本号 -- 
  spring.cloud-version Hoxton.SR9 /spring.cloud-version 
  spring.boot-version 2.3.5.RELEASE /spring.boot-version 
  spring.cloud.alibaba-version 2.1.2.RELEASE /spring.cloud.alibaba-version 
  /properties 
  dependencyManagement 
  dependencies 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-dependencies /artifactId 
  version ${spring.boot-version} /version 
  type pom /type 
  scope import /scope 
  /dependency 
  dependency 
  groupId org.springframework.cloud /groupId 
  artifactId spring-cloud-dependencies /artifactId 
  version ${spring.cloud-version} /version 
  type pom /type 
  scope import /scope 
  /dependency 
  dependency 
  groupId com.alibaba.cloud /groupId 
  artifactId spring-cloud-alibaba-dependencies /artifactId 
  version ${spring.cloud.alibaba-version} /version 
  type pom /type 
  scope import /scope 
  /dependency 
  /dependencies 
  /dependencyManagement 
  build 
  plugins 
  plugin 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-maven-plugin /artifactId 
  /plugin 
  /plugins 
  /build 
 /project

设置跳过单元测试

商品服务和订单服务创建

通过 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 文件,如下

?xml version= 1.0  encoding= UTF-8 ? 
 project xmlns= http://maven.apache.org/POM/4.0.0  xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance 
 xsi:schemaLocation= http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd 
  modelVersion 4.0.0 /modelVersion 
  artifactId cloud-product /artifactId 
  version 0.0.1-SNAPSHOT /version 
  name cloud-product /name 
  description 商品服务 /description 
  parent 
  groupId com.baizhi /groupId 
  artifactId cloud-demo /artifactId 
  version 1.0-SNAPSHOT /version 
  /parent 
  dependencies 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-starter-web /artifactId 
  /dependency 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-starter-test /artifactId 
  scope test /scope 
  exclusions 
  exclusion 
  groupId org.junit.vintage /groupId 
  artifactId junit-vintage-engine /artifactId 
  /exclusion 
  /exclusions 
  /dependency 
  /dependencies 

/project

修改父项目 pom 文件

微服务开发环境怎么配置

在商品服务中创建测试 Controller 接口

微服务开发环境怎么配置

编写 application 配置文件启动项目

微服务开发环境怎么配置

微服务开发环境怎么配置

订单服务创建

微服务开发环境怎么配置

效果如下:

微服务开发环境怎么配置

选择通过 Spring Initializr 的方式创建项目

指定使用 Alibaba Java 工程脚手架的地址

选择依赖创建项目

修改 pom 文件,继承父项目

在订单服务中创建测试 Controller 接口

微服务开发环境怎么配置

编写 application 配置文件启动项目

微服务开发环境怎么配置

RestTemplate 订单服务如何获取商品服务数据

服务调用:订单服务发请求,请求商品服务,获取响应数据

Java 代码怎么发 http 请求?

HTTPClient Apache

RestTemplate Spring

参考资料:https://mp.weixin.qq.com/s/3MfNWtTfckGr2hG9Ly9OPg

RestTemplate 简介和基本使用

Spring 中封装的通过 Java 代码发送 RestFul 请求 (HTTP) 的模板类,内置发送 get post delete 等请求的方法,在 SpringBoot 中只要导入 spring-boot-starter-web 的依赖可以直接使用。

导入依赖 spring-boot-starter-web

dependency 
 groupId org.springframework.boot /groupId 
 artifactId spring-boot-starter-web /artifactId 
 /dependency

配置 RestTemplate

微服务开发环境怎么配置

在测试类中使用 RestTemplate 的 APi 发送请求

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);
 ResponseEntity String  entity = restTemplate.getForEntity(url, String.class);
 System.out.println(entity.getStatusCode());
 System.out.println(entity.getBody());
 }

 String result = restTemplate.getForObject(  http://localhost:8081/product/getProductById?id={id} ,  String.class,  map  );  System.out.println(result);
}

最后商品服务通过 RestTemplate 调用订单服务

“微服务开发环境怎么配置”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计6607字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)