项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
二.微服务AlibabaCloud介绍和架构环境准备
2020-11-10
·
softbabet博主
·
原创
·
微服务
·
本文共 1,506个字,预计阅读需要 6分钟。
### 微服务AlibabaCloud介绍 [官网](https://spring.io/projects/spring-cloud-alibaba#overview) > 为什么要选择AlibabaCloud , 和SpringCloud的区别? SpringCloud和AlibabaCloud组件存在很大交集,互相配合 - SpringCloud很多组件是基于第三方整合,目前多个已经不更新了,比如`zuul、eureka、hystrix`等 - AlibabaCloud 提供`一站式`微服务解决方法,已经和SpringCloud进行了整合,组件互相支持 AlibabaCloud全家桶介绍 [GITHUB地址](https://github.com/alibaba/spring-cloud-alibaba) - 服务注册发现:Nacos - 服务限流降级:Sentinel - 分布配置中心:Nacos - 服务网关:SpringCloud Gateway - 服务之间调用:Feign、Ribbon - 链路追踪:Sleuth+Zipkin ### 在线教育微服务模块设计和环境准备 模块划分:`视频服务`,`订单服务`,`用户服务` 必备基础环境:JDK8以上版本+`Maven3.5`(采用默认,防止有些包下载不下来) ### 在线教育微服务数据导入 采用3个数据库,每个服务单独一个库 **视频服务数据库 video表** ```sql CREATE TABLE `video` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(524) DEFAULT NULL COMMENT '视频标题', `summary` varchar(1026) DEFAULT NULL COMMENT '概述', `cover_img` varchar(524) DEFAULT NULL COMMENT '封面图', `price` int(11) DEFAULT NULL COMMENT '价格,分', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `point` double(11,2) DEFAULT '8.70' COMMENT '默认8.7,最高10分', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8; ``` ```sql INSERT INTO `video` (`id`, `title`, `summary`, `cover_img`, `price`, `create_time`, `point`) VALUES (30, '互联网架构之JAVA虚拟机JVM零基础到高级实战', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E8%AF%A6%E6%83%85%E5%9B%BE.png', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/maven/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-mawen.png', 3980, '2021-06-24 22:14:00', 9.10), (40, '全新微信小程序零基础到项目实战', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E8%AF%A6%E6%83%85%E5%9B%BE.png', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-%E5%B0%8F%E7%A8%8B%E5%BA%8F.png', 5980, '2021-01-18 22:14:00', 9.10), (41, '玩转搜索框架ElasticSearch7.x实战', 'https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/video/2019_backend/elasticsearch7_detail.jpeg', 'https://xd-video-pc-img.oss-cn-beijing.aliyuncs.com/xdclass_pro/video/2019_backend/elasticsearch7.png', 4880, '2021-01-10 22:14:00', 8.70), (45, 'Docker实战视频教程入门到高级dockerfile/compose-Harbor', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Docker/%E8%AF%A6%E6%83%85%E5%9B%BE.jpeg', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/Docker/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-docker.png', 5980, '2021-01-10 22:14:00', 9.30), (46, '新版javase零基础到高级教程小白自学编程', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/%E6%96%B0%E7%89%88javase/%E8%AF%A6%E6%83%85%E5%9B%BE.png', 'https://file.xdclass.net/video/2020/%E6%96%B0%E7%89%88javase/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-javase.png', 3980, '2021-01-24 22:14:00', 8.80), (47, 'Nodejs教程零基础入门到项目实战前端视频教程', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/node/%E5%AE%98%E7%BD%91%E8%AF%A6%E6%83%85%E5%9B%BE-node.png', 'https://xdvideo-file.oss-cn-shenzhen.aliyuncs.com/video/2020/node/%E5%AE%98%E7%BD%91%E4%B8%BB%E5%9B%BE-node.png', 6980, '2021-01-24 22:14:00', 8.90); ``` **用户服务数据库 user表** ```sql CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `phone` varchar(32) DEFAULT NULL, `pwd` varchar(128) DEFAULT NULL, `sex` int(2) DEFAULT NULL, `img` varchar(128) DEFAULT NULL, `create_time` datetime DEFAULT NULL, `role` int(11) DEFAULT NULL COMMENT '1是普通用户,2是管理员', `username` varchar(128) DEFAULT NULL, `wechat` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4; ``` ```sql INSERT INTO `user` (`id`, `phone`, `pwd`, `sex`, `img`, `create_time`, `role`, `username`, `wechat`) VALUES (1, '123', '666', 1, 'xdclass.net', '2021-09-09 00:00:00', 1, 'jack', 'xdclass6'), (2, '2323432', '794666918', 1, 'wwwww', '2020-05-20 04:54:01', 1, '小滴Anna姐姐', 'xdclass-anna'), (3, '2323432', 'xdclass-lw', 1, 'wwwww', '2020-05-20 04:54:42', 1, '二当家小D', 'xdclass1'), (4, '2323432', '3232323', 1, 'wwwww', '2020-05-20 04:55:07', 1, '老王', 'xdclass-lw'); ``` **订单服务数据库video_order表** ```sql CREATE TABLE `video_order` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `out_trade_no` varchar(64) DEFAULT NULL COMMENT '订单唯一标识', `state` int(11) DEFAULT NULL COMMENT '0表示未支付,1表示已支付', `create_time` datetime DEFAULT NULL COMMENT '订单生成时间', `total_fee` int(11) DEFAULT NULL COMMENT '支付金额,单位分', `video_id` int(11) DEFAULT NULL COMMENT '视频主键', `video_title` varchar(256) DEFAULT NULL COMMENT '视频标题', `video_img` varchar(256) DEFAULT NULL COMMENT '视频图片', `user_id` int(12) DEFAULT NULL COMMENT '用户id', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8; ``` ### Maven聚合工程创建微服务项目实战 使用maven创建工程:`yuan-alibaba-cloud`父级工程·,删除src目录,改为pom工程,引入相应的依赖包: ```xml
pom
1.8
org.springframework.boot
spring-boot-dependencies
2.3.3.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR8
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.1.RELEASE
pom
import
org.springframework.boot
spring-boot-maven-plugin
true
true
``` 添加4个子项目:`yuan-common,yuan-video-service,yuan-user-service,yuan-order-service` 父级工程聚合这些: ```xml
yuan-common
yuan-video-service
yuan-user-service
yuan-order-service
``` 对其三个应用服务引入web与common包 ```xml
org.springframework.boot
spring-boot-starter-web
cn.yuan
yuan-common
1.0-SNAPSHOT
``` ### AlibabaCloud微服务Mybatis连接Mysql数据库 创建common包实体类 ```java public class User { private Integer id; private String name; private String pwd; private String headImg; private String phone; private Date createTime; private String wechat; } public class Video { private Integer id; private String title; private String summary; private String coverImg; private Integer price; private Date createTime; private Double point; } public class VideoOrder { private Integer id; private String outTradeNo; private Integer state; private Date createTime; private Integer totalFee; private Integer videoId; private String videoTitle; private String videoImg; private Integer userId; } ``` Mybatis依赖导入+数据库配置:yuan-video-service,yuan-user-service,yuan-order-service 聚合工程pom.xml修改【注意】 ```xml
1.8
1.8
1.8
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.2
pom
import
``` 添加mybatis依赖和数据库驱动 ```xml
org.mybatis.spring.boot
mybatis-spring-boot-starter
mysql
mysql-connector-java
``` 3个模块配置数据库连接(记得修改 端口、应用名称、数据库名称) ```yml server: port: 9000 spring: application: name: yuan-video-service datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/cloud_video?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: # 控制台输出sql、下划线转驼峰 mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true ``` - controller->service->mapper 开发 - application配置 ```java @SpringBootApplication @MapperScan("cn.yuan.dao") ``` ### 微服务之间的调用-下单购买视频 **服务直接怎么调用**: **`RPC`**: 远程过程调用,像调用本地服务(方法)一样调用服务器的服务;支持同步、异步调用;客户端和服务器之间建立TCP连接,可以一次建立一个,也可以多个调用复用一次链; RPC数据包小;protobuf;thrift rpc:编解码,序列化,链接,丢包,协议 **`Rest(Http`**):http请求,支持多种协议和功能;开发方便成本低; http数据包大;java开发:resttemplate或者httpclient 用户下单 - 订单服务->视频服务(查询价格和冗余信息) ```java @Bean public RestTemplate getRestTemplate(){ return new RestTemplate(); } Video video = restTemplate.getForObject("http://localhost:9000/api/v1/video/find_by_id?videoId="+videoId,Video.class); ``` **存在的问题**:1. 服务之间的IP信息写死;2. 服务之间无法提供负载均衡;3. 多个服务直接关系调用维护复杂