SpringCloud Hoxton版微服务-入门篇
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版微服务-入门篇相关推荐
- SpringCloud Hoxton版微服务- Gateway网关
Gateway网关 一.Gateway概念 二.三大核心概念 1.Route (路由) 2.Predicate (断言) 3.Filter (过滤) 三.工作流程图 四.工程搭建 1.新建Gatewa ...
- SpringCloud Hoxton版微服务-RestTempalte + @LoadBlanced 实现负载均衡
RestTempalte + @LoadBlanced 实现负载均衡 一.服务提供者注册 二.服务消费者调用 1.编写服务消费者 2.RestTemplate中开启负载均衡支持 3.启动服务测试 总结 ...
- SpringCloud Hoxton版微服务- OpenFeign实现服务调用
openfeign服务调用 一.OpenFeign概念 二.OpenFeign使用步骤 1.依赖 2.添加注解支持 3.注解业务类调用 三.OpenFeign超时控制 1.服务提供者 2.服务消费者 ...
- SpringCloud Hoxton版微服务- Ribbon实现负载均衡
Ribbon实现负载均衡 Ribbon概念 一.Ribbon策略 二.配置使用 1.编写服务提供者 2.编写服务消费者 3.测试负载均衡随机策略 Ribbon概念 Spring Cloud Ribbo ...
- 微服务入门篇(二),万字长文带你实操作SpringCloudAlibaba微服务组件
目录 SpringCloudAlibaba介绍 简介 为什么要学SpringCloudAlibaba 从Spring Cloud netflix 到 Spring Cloud Alibaba 功能组件 ...
- SpringCloud(若依微服务版)读取Nacos中的配置以及多个服务共享Nacos配置的使用
场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...
- Java生鲜电商平台-微服务入门与服务的拆分架构实战
Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在"强大"的JSP上面,那时候S ...
- Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端
Spring Cloud Hoxton 版本微服务项目搭建 admin 监控客户端 前言 在上一篇文章博主已经讲解了admin 管理中心服务项目如何创建,不会的话可以前往学习,传送门:Spring C ...
- swagger 返回json字符串_Net Core微服务入门全纪录(完结)——Ocelot与Swagger
前言 上一篇[.Net Core微服务入门全纪录(八)--Docker Compose与容器网络]完成了docker-compose.yml文件的编写,最后使用docker compose的一个up指 ...
最新文章
- 怎么设计一个合适的延时队列?
- proto文件支持继承吗_搞懂 Javascript中this 指向及继承原理
- matlab中非0即1函数,matlab 中统计一个数组中非零元素个素的函数名称是什么?
- Java EE API整合:为什么Spring要与“笨重”的Java EE共舞?
- CCF NOI1035 数根
- 史上最NB程序员的自白
- 单实例activemq 数据测试
- 【Docker】 Docker pull的时候指定仓库
- excel批量导入数据
- 数据-第14课-栈的定义及实现
- Python入门教程(从小白到高级)(新版)
- 【办公协作软件】万彩办公大师教程丨全能文档转换工具
- 记一次定位解决SpringBoot中内嵌Tomcat的Bug问题
- python调用OpenCV和IOSAutoTouch实现硬件级免越狱自动化
- 我的2014作的一手好死,2015求轻虐
- 全网最全持续集成接口自动化-jmeter+ant+jenkins
- IE浏览器主页被篡改为2345,针对一般解决办法无法解决的情况
- JAVA简介及其编码规范
- Tree后台实现代码以及运行结果
- PyTorch图像分割模型——segmentation_models_pytorch库的使用
热门文章
- 根据屏幕大小加载css,css根据屏幕大小切换样式
- 信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组
- 组合数学 —— 组合数取模
- 搬货物(51Nod-1596)
- 图论 —— 网络流 —— 最大流 —— FF 算法与 EK 算法
- 暑期训练日志----2018.7.30
- 小鱼的游泳时间(洛谷-P1425)
- 49 FI配置-财务会计-固定资产-与总账集成-分配总帐科目
- 4.4.1 数据赋值
- 一起学习C语言:C语言基本语法(四)