温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

微服务开发环境怎么配置

发布时间:2022-01-12 09:12:55 来源:亿速云 阅读:146 作者:iii 栏目:云计算

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

微服务开发环境准备

SpringCloud版本

相关文档

  • SpringCloud官网 https://spring.io/projects/spring-cloud/

历史背景

版本号命名规则

关于SpringCloud的分类,根据SpringCloud版本的命名方式的改变可以分为两个阶段:

  1. 伦敦地铁站名

    在Spring Cloud 2020.0.0版本之前,SpringCloud的所有版本均按照伦敦地铁站站名从A-Z的排序进行命名,如下:

    微服务开发环境怎么配置

    微服务开发环境怎么配置

    为了便于称呼,一般也都称之为A版本,B版本,F版本和H版本。

    SR9,每当SpringCloud解决了一个重大bug就会增加SR版本,SR9就意味着在H版本的基础上解决了九个重大bug

  2. 日历化版本

    从 Spring Cloud 2020.0.0-M1 开始,Spring Cloud 废除了这种英国伦敦地铁站的命名方式,而使用了全新的 "日历化" 版本命名方式。

    什么是日历化版本?

    英文名称:Calendar Versioning

    日历化版本不是基于任意的数字,而是基于项目的发布日期的版本控制约定,随着时间的推移,版本会越来越好。

    Spring Cloud 使用了 YYYY.MINOR.MICRO 的命名规则:

    预发布版本的后缀分隔符也从 . 变更为 -,如:2020.0.0-M12020.0.0-RC2 命名所示。

    使用日历化版本命名方式,可以更清楚的看出当前版本的年份,看到字母、纯数字方式的版本号都不知道自己多久没升级

    • YYYY:表示 4 位年份;

    • MINOR:代表一个递增的数字,每年以 0 开始递增;

    • MICRO:代表版本号后缀,就和之前使用的 .0 类似于 .RELEASE 一样,.2 类似于 .SR2

版本的变化给SpringCloud带来了什么样的改变呢?

SpringCloud的改变目前来说主要体现在对Netflix套件的支持上,早期SpringCloud主要是封装了Netflix套件实现服务注册发现,负载均衡,熔断等功能,但是随着版本的迭代,由于Netflix停止开源项目的更新,所以SpringCloud开始逐步减少对Netflix套件的支持。简单可以分为以下三个时间阶段:

  1. 早期,SpringCloud完全封装Netflix套件,核心功能均有Netflix组件提供

  2. 2018年前后,Netflix 公司宣布其核心组件 Hystrix、Ribbon、Zuul 等均进入维护状态。同时Spring Cloud Netflix 项目进入维护模式,并计划在 2020 年废除。

  3. 北京时间 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

项目搭建

父项目创建

  1. 创建父项目

  2. 确认IDEA设置

    1. Maven设置

      微服务开发环境怎么配置

    2. 文件过滤 可以不配置

      不显示 .idea 文件夹

      微服务开发环境怎么配置

  3. 父项目 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>


  4. 设置跳过单元测试

    微服务开发环境怎么配置

商品服务和订单服务创建

通过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

商品服务创建
  1. 选择通过Spring Initializr的方式创建项目

  2. 指定使用Alibaba Java工程脚手架的地址https://start.aliyun.com/

    微服务开发环境怎么配置

  3. 选择依赖创建项目

    微服务开发环境怎么配置

  4. 修改pom文件,继承父项目

    1. 修改商品服务的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>


    2. 修改父项目pom文件

      微服务开发环境怎么配置

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

    微服务开发环境怎么配置

  6. 编写application配置文件启动项目

    微服务开发环境怎么配置

    微服务开发环境怎么配置

订单服务创建

微服务开发环境怎么配置

效果如下:

微服务开发环境怎么配置

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

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

  3. 选择依赖创建项目

  4. 修改pom文件,继承父项目

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

    微服务开发环境怎么配置

  6. 编写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());

    }


    @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调用订单服务

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI