SpringCloud Hoxton.SR9初级版

文章目录

    • SpringCloud Hoxton.SR9初级版
  • 前言
  • 一、架构选型
  • 二、父工程创建
    • 1、创建maven工程:
    • 2、全局设置编码:
    • 3、注释生效激活:
    • 4、java编译版本选择:
    • 5、删除src文件夹、清除pom.xml部分代码
    • 5、删除src文件夹、清除pom.xml部分代码聚合结果:
    • 6、完善pom.xml依赖:
  • 二、子工程创建-支付模块
    • 1、创建支付模块:
    • 2、模块名称 dt-provider-payment:
    • 3、父工程的pom.xml依赖便会自动导入 dt-provider-payment子工程的支付模块:
    • 4、dt-provider-payment子工程的支付模块:
    • 5、dt-provider-payment子工程基础架构如下:
    • 6、dt-provider-payment导入pom.xml依赖:
    • 6、配置application.yml:
    • 6、创建启动器PaymentAppMain.class:
    • 7、创建PaymentController.class控制器:
  • 三、子工程创建-订单模块
    • 1、订单服务名称 dt-consumer-order:
    • 2、配置application.yml:
    • 3、创建OrderAppMain启动器:
    • 4、创建OrderController.class控制器:
    • 5、订单(消费者)调用支费服务(提供者):
      • 5.1 RestTemplate简介
      • 5.2 RestTemplate配置类
  • 四、子工程创建-公共模块
    • 1、公共服务名称 dt-service-common:
    • 2、导入pom.xml依赖:
    • 3、通用JSON返回实体:
    • 4、通用Payment 实体:
    • 5、通用基础架构:
    • 6、打包上传到maven库,共享通用:
      • 6.1 先clean再install
      • 6.2 打包成功后即可在订单和支付模块使用公共依赖库
  • 五、测试:
    • 1、支付模块自测试
    • 2、订单调用支付模块测试
  • 六、最后

前言

Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。
Spring Cloud并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。
换句话说:Spring Cloud提供了构建分布式系统所需的“全家桶”。

一、架构选型

spring-cloud官方地址:https://spring.io/projects/spring-cloud#learn

时至今日,技术选型官方推荐如下:

可以看到官方更新的最新H版,并且推荐我们使用的Spring-Boot版本是2.3.5的稳定版。

二、父工程创建

1、创建maven工程:


2、全局设置编码:

3、注释生效激活:

4、java编译版本选择:

5、删除src文件夹、清除pom.xml部分代码


5、删除src文件夹、清除pom.xml部分代码聚合结果:

6、完善pom.xml依赖:

<packaging>pom</packaging><!--统一管理jar包版本--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><mysql.version>8.0.17</mysql.version><druid.version>1.1.16</druid.version><mybatis.spring.boot.version>1.3.2</mybatis.spring.boot.version><!--架构选型--><springboot.version>2.3.5.RELEASE</springboot.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version></properties><!--子模块继承父工程--><dependencyManagement><dependencies><!--spring-boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency><!--spring-cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version><scope>runtime</scope></dependency><!-- druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring.boot.version}</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><!--log4j--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency></dependencies></dependencyManagement><!--热部署插件 开启--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork><addResources>true</addResources></configuration></plugin></plugins></build>

二、子工程创建-支付模块

1、创建支付模块:


2、模块名称 dt-provider-payment:

3、父工程的pom.xml依赖便会自动导入 dt-provider-payment子工程的支付模块:

4、dt-provider-payment子工程的支付模块:

5、dt-provider-payment子工程基础架构如下:

6、dt-provider-payment导入pom.xml依赖:

<dependencies><!--三必备包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--devtools--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

6、配置application.yml:

server:port: 9001
spring:application:name: cloud-payment-servicedatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://xxxxxxx:3306/dtcloud?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: 123456
mybatis:mapperLocations:  classpath:mapper/*.xmltype-aliases-package: com.dtydf.springcloud.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

6、创建启动器PaymentAppMain.class:

7、创建PaymentController.class控制器:

@RestController
@RequestMapping("/api/pay")
public class PaymentController {@Autowiredprivate PaymentService paymentService;@GetMapping(value = "/payment/get/{id}")public CommentResult<Payment> getPaymentById(@PathVariable("id") Long id){Payment payment = paymentService.getById(id);log.info("返回结果:"+payment);if(payment != null){return new CommentResult<>(200,"查询成功",payment);}else {return new CommentResult<>(201,"没有查询到对应的记录",null);}}
}

三、子工程创建-订单模块

1、订单服务名称 dt-consumer-order:

2、配置application.yml:

server:port: 8001
spring:application:name: cloud-consumer-service

3、创建OrderAppMain启动器:

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

4、创建OrderController.class控制器:

@RestController
@Slf4j
public class OrderController {private static final String PAYMENT_URL = "http://localhost:9001";@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/consumer/payment/save")public CommentResult<Payment> create(Payment payment){return restTemplate.postForObject(PAYMENT_URL + "/payment/save",payment,CommentResult.class);}@GetMapping(value = "/consumer/payment/get/{id}")public CommentResult<Payment> getPaymentById(@PathVariable("id") Long id){log.info("订单(消费者)调用支费服务(提供者)");return restTemplate.getForObject(PAYMENT_URL + "/payment/get/"+id,CommentResult.class);}}

5、订单(消费者)调用支费服务(提供者):

5.1 RestTemplate简介

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率

5.2 RestTemplate配置类

/*** @description: RestTemplate* @author: ydf* @date: 2020/12/2 22:45* @version: v1.0*/
@Configuration
public class ApplicationContextConfig {@Bean@LoadBalanced //开启负载均衡的功能(轮询的方式)public RestTemplate restTemplate(){return new RestTemplate();}
}

四、子工程创建-公共模块

1、公共服务名称 dt-service-common:

2、导入pom.xml依赖:

<dependencies><!--devtools--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--hutool Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.0</version></dependency></dependencies>

3、通用JSON返回实体:

/*** @description: 通用JSON返回实体* @author: ydf* @date: 2020/12/2 21:50* @version: v1.0*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommentResult<T> {private Integer code;private String message;private T data;public CommentResult(Integer code,String message){this(code,message,null);}
}

4、通用Payment 实体:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {private static final long serialVersionUID = -6582898024290800951L;private Long id;private String serial;
}

5、通用基础架构:

6、打包上传到maven库,共享通用:

6.1 先clean再install

6.2 打包成功后即可在订单和支付模块使用公共依赖库

<!--引入自己自定义的api通用包,可以使用Payment支付Entity-->
<dependency><groupId>com.dtydf.springcloud</groupId><artifactId>dt-service-common</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope>
</dependency>

五、测试:

1、支付模块自测试

http://localhost:9001/payment/get/1

2、订单调用支付模块测试

http://localhost:8001/consumer/payment/get/1

六、最后

订单(消费者)调用支费服务(提供者),通过Spring提供的RestTemplate,访问Rest服务的客户端,实现了简单的微服务间的调用。

下一篇我们将使用RestTemplate做服务调用的负载均衡实现。

SpringCloud Hoxton版微服务-入门篇相关推荐

  1. SpringCloud Hoxton版微服务- Gateway网关

    Gateway网关 一.Gateway概念 二.三大核心概念 1.Route (路由) 2.Predicate (断言) 3.Filter (过滤) 三.工作流程图 四.工程搭建 1.新建Gatewa ...

  2. SpringCloud Hoxton版微服务-RestTempalte + @LoadBlanced 实现负载均衡

    RestTempalte + @LoadBlanced 实现负载均衡 一.服务提供者注册 二.服务消费者调用 1.编写服务消费者 2.RestTemplate中开启负载均衡支持 3.启动服务测试 总结 ...

  3. SpringCloud Hoxton版微服务- OpenFeign实现服务调用

    openfeign服务调用 一.OpenFeign概念 二.OpenFeign使用步骤 1.依赖 2.添加注解支持 3.注解业务类调用 三.OpenFeign超时控制 1.服务提供者 2.服务消费者 ...

  4. SpringCloud Hoxton版微服务- Ribbon实现负载均衡

    Ribbon实现负载均衡 Ribbon概念 一.Ribbon策略 二.配置使用 1.编写服务提供者 2.编写服务消费者 3.测试负载均衡随机策略 Ribbon概念 Spring Cloud Ribbo ...

  5. 微服务入门篇(二),万字长文带你实操作SpringCloudAlibaba微服务组件

    目录 SpringCloudAlibaba介绍 简介 为什么要学SpringCloudAlibaba 从Spring Cloud netflix 到 Spring Cloud Alibaba 功能组件 ...

  6. SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  7. Java生鲜电商平台-微服务入门与服务的拆分架构实战

    Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在"强大"的JSP上面,那时候S ...

  8. Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端

    Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端 前言 在上一篇文章博主已经讲解了admin 管理中心服务项目如何创建,不会的话可以前往学习,传送门:Spring C ...

  9. swagger 返回json字符串_Net Core微服务入门全纪录(完结)——Ocelot与Swagger

    前言 上一篇[.Net Core微服务入门全纪录(八)--Docker Compose与容器网络]完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指 ...

最新文章

  1. 怎么设计一个合适的延时队列?
  2. proto文件支持继承吗_搞懂 Javascript中this 指向及继承原理
  3. matlab中非0即1函数,matlab 中统计一个数组中非零元素个素的函数名称是什么?
  4. Java EE API整合:为什么Spring要与“笨重”的Java EE共舞?
  5. CCF NOI1035 数根
  6. 史上最NB程序员的自白
  7. 单实例activemq 数据测试
  8. 【Docker】 Docker pull的时候指定仓库
  9. excel批量导入数据
  10. 数据-第14课-栈的定义及实现
  11. Python入门教程(从小白到高级)(新版)
  12. 【办公协作软件】万彩办公大师教程丨全能文档转换工具
  13. 记一次定位解决SpringBoot中内嵌Tomcat的Bug问题
  14. python调用OpenCV和IOSAutoTouch实现硬件级免越狱自动化
  15. 我的2014作的一手好死,2015求轻虐
  16. 全网最全持续集成接口自动化-jmeter+ant+jenkins
  17. IE浏览器主页被篡改为2345,针对一般解决办法无法解决的情况
  18. JAVA简介及其编码规范
  19. Tree后台实现代码以及运行结果
  20. PyTorch图像分割模型——segmentation_models_pytorch库的使用

热门文章

  1. 根据屏幕大小加载css,css根据屏幕大小切换样式
  2. 信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组
  3. 组合数学 —— 组合数取模
  4. 搬货物(51Nod-1596)
  5. 图论 —— 网络流 —— 最大流 —— FF 算法与 EK 算法
  6. 暑期训练日志----2018.7.30
  7. 小鱼的游泳时间(洛谷-P1425)
  8. 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
  9. 4.4.1 数据赋值
  10. 一起学习C语言:C语言基本语法(四)