微服务入门讲解
那些年的加班夜!
将整体服务拆分为:
对于我们这种要求简单的,工作的时候一般都只想做一件事就好了,不要让我顾及太多。
我们可以尽情的在自己负责的项目上“玩耍”啦!对于其他服务层的对接仅需要按照各个应用通信接口文档去走即可!
我们总是要和人交流的,对于我们自己独自负责的服务也是需要去交朋友的,因此它需要与其他各个服务进行通信,这里的通信可能是同步的、异步的。
对于每个引用都有他们自己的数据,微服务的采纳有助于我们可以针对部分火爆业务采用不同的数据库类型或者分库读取,而不再需要在同一项目整合多个数据库操作。
我们可以发挥不同语言的优势,比如python、nodejs、php…. 这对技术专项不同的开发团队来说,配合起来将更加容易与得心应手。
一个普通的电商项目:
数据库表:
数据库表设计SQL
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for goods -- ---------------------------- DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `goods_id` varchar(50) NOT NULL COMMENT '商品ID', `goods_name` varchar(255) DEFAULT NULL COMMENT '商品名', `goods_detail` varchar(255) DEFAULT NULL COMMENT '商品详情', `goods_price` decimal(10,2) DEFAULT NULL COMMENT '商品价格', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`goods_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'; -- ---------------------------- -- Records of goods -- ---------------------------- INSERT INTO `goods` VALUES ('MS000001', '安卓机', '高性能、火热性感', '799.00', '2018-12-12 16:43:59'); INSERT INTO `goods` VALUES ('MS000002', '苹果机', '酷炫来袭、值得拥有', '2999.00', '2018-12-12 16:54:58'); -- ---------------------------- -- Table structure for inventory -- ---------------------------- DROP TABLE IF EXISTS `inventory`; CREATE TABLE `inventory` ( `inventory_id` varchar(50) NOT NULL COMMENT '订单id', `goods_id` varchar(50) NOT NULL COMMENT '商品id', `inventory_num` int(11) NOT NULL COMMENT '库存数', PRIMARY KEY (`inventory_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='库存表'; -- ---------------------------- -- Records of inventory -- ---------------------------- INSERT INTO `inventory` VALUES ('IN4567825', 'MS000002', '13'); INSERT INTO `inventory` VALUES ('IN4567826', 'MS000001', '10'); -- ---------------------------- -- Table structure for orders -- ---------------------------- DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `order_id` varchar(50) NOT NULL COMMENT '订单id', `goods_id` varchar(50) DEFAULT NULL COMMENT '商品id', `name` varchar(255) DEFAULT NULL COMMENT '用户名', `order_price` decimal(10,2) DEFAULT NULL COMMENT '订单价格', `order_num` int(11) DEFAULT NULL COMMENT '商品总数', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`order_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Records of orders -- ---------------------------- INSERT INTO `orders` VALUES ('MS04663799', 'MS000002', '猫叔', '2999.00', '1', '2018-12-13 00:04:18'); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id', `name` varchar(255) DEFAULT NULL COMMENT '用户名', `password` varchar(255) DEFAULT NULL COMMENT '用户密码', `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', '猫叔', '123456', '2018-12-12 16:44:23');
1、商品下单接口
localhost:8080/sells/order/order
POST
参数:
{ "code": 200, "msg": "成功", "data": "MS04638097" }
2、查询用户订单列表
localhost:8080/sells/order/order?id=1
GET
参数:
{ "code": 200, "msg": "成功", "data": [ { "orderId": "MS04131640", "goodsId": "MS000002", "name": "猫叔", "orderPrice": 2999, "orderNum": 1, "createTime": "2018-12-16T10:33:14.000+0000" }, { "orderId": "MS04254690", "goodsId": "MS000002", "name": "猫叔", "orderPrice": 2999, "orderNum": 1, "createTime": "2018-12-16T13:57:10.000+0000" } ] }
3、查询商品库存信息
localhost:8080/sells/goods/goods?id=1&goodsId=MS000002
GET
参数:
{ "code": 200, "msg": "成功", "data": { "inventoryId": "IN4567825", "goodsId": "MS000002", "inventoryNum": 9 } }
说到SpringCloud,我们还需要说一下它基于的更厉害的框架,它就是Netflix。Netflix的多个开源组件一起正好可以提供完整的分布式微服务基础架构环境,而SpringCloud就是对Netflix的多个开源组件进一步封装而成的。
同时,它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,比如我们今天将学到的服务发现注册(Eureka)、调用框架(声明式服务客户端Fegin)等等。
Spring Cloud将目前各个比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,因为我们仅仅配置一下、写几句代码就可以实现一个想要的简单的微服务。
3、核心组件为:
Spring Cloud 服务间的一种RestFul调用方式
1、Fegin
微服务还有更多知识点···
1、避免为了“微服务”而使用“微服务”
2、对于传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及累积微服务架构经验,而非照搬采纳,一口气吃出大胖子。