前面我们分别给大家介绍了SpringBoot,SpringCloud的Eureka(注册中心),ribbon(负载均衡),Feign(声明式服务调用),Hystrix(服务容错)等内容,在介绍后续内容之前我们穿插通过一个案例来综合使用下前面介绍的内容。
首先我们来看下在微服务架构中我们经常会选用的设计模式
代理服务作为整个系统的入口服务。
代理服务的作用:
聚合设计常用在报表项目中,在报表服务中可以直接获取到其他各个系统中的数据。
服务于服务相互之间相互关联,比如交易系统中查看交易信息,交易信息一般会包括:1.支付信息,2.订单信息,3.上篇信息,4.用户信息等
设计模式往往都不是单独使用的,而是相互组合来完成完整需求的
数据共享模式一般在后台管理系统中用的比较多,可以直接连接多个数据库,操作到的数据如果涉及到了缓存,那么必须通过调用接口来完成。保证数据的一致性。
在需要解耦或者不需要及时响应的服务中,异步设计是最恰当不过的了。
案例的结构为一个代理链条设计结构。具体如下
一共五个服务,除了consumer服务外,其他每个服务都有独立的数据库来持久化数据。
创建四个库,对于四个服务,具体如下:
CREATE DATABASE;
USE `book-user`;
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_name` VARCHAR(50) DEFAULT NULL COMMENT '用户名',
`password` VARCHAR(50) NOT NULL COMMENT '密码',
`email` VARCHAR(50) NOT NULL COMMENT 'email',
`deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认 0 不删除,1 删除',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
COMMENT='用户表';
INSERT INTO
`user`(`id`,`user_name`,`password`,`email`,`deleted`,`create_time`,`update_time`)
VALUES (1,'admin','admin','dengpbs@163.com',0,'2019-06-16 12:56:31','2019-06-16 14:47:25');
CREATE DATABASE ;
USE `book-product`;
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) DEFAULT NULL COMMENT '产品名称',
`status` TINYINT(4) NOT NULL DEFAULT '0' COMMENT '产品状态:0 待审,1 上架,2 下架,3 停售,4 测试',
`price` INT(10) NOT NULL COMMENT '产品价格 单位分',
`detail` TEXT COMMENT '产品详情',
`deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认 0 不删除,1 删除',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
COMMENT='产品信息';
INSERT INTO `product` (`id`, `name`, `status`, `price`, `detail`, `deleted`, `create_time`, `update_time`) VALUES('1','波波烤鸭 java 程序设计','1','100','波波烤鸭 java 程序设计','0','2017-12-03 09:08:12','2017-12-17 16:44:39');
INSERT INTO `product` (`id`, `name`, `status`, `price`, `detail`, `deleted`, `create_time`, `update_time`) VALUES('2','波波烤鸭 程序员经典案例','1','200','波波烤鸭 百战程序员经典案例','0','2017-12-03 09:08:12','2017-12-17 16:44:41');
INSERT INTO `product` (`id`, `name`, `status`, `price`, `detail`, `deleted`, `create_time`, `update_time`) VALUES('3','波波烤鸭-人工智能基础教程','1','300','波波烤鸭 人工智能基础教程','0','2017-12-17 16:44:35','2017-12-17 16:45:15');
CREATE DATABASE `book-order`;
USE `book-order`;
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`product_id` INT(10) NOT NULL DEFAULT '0' COMMENT '产品 ID',
`price` INT(10) DEFAULT '0' COMMENT '价格',
`user_id` INT(10) DEFAULT '0' COMMENT '用户账号 ID',
`trade_id` INT(10) DEFAULT '0' COMMENT '交易号 ID',
`trade_status` TINYINT(1) DEFAULT '0' COMMENT '支付状态 0=未支付 1=已支付',
`deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认 0 不删除,1 删除',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE DATABASE;
USE `book-trade`;
DROP TABLE IF EXISTS `trade`;
CREATE TABLE `trade` (
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT 'IID',
`order_id` INT(10) NOT NULL COMMENT '订单 ID',
`user_id` INT(10) NOT NULL COMMENT '用户 ID',
`price` INT(10) NOT NULL COMMENT '支付价',
`pay_status` TINYINT(4) NOT NULL COMMENT '1 未付款 2 付款中 3 付款失败 4 付款完成',
`pay_type` TINYINT(4) NOT NULL COMMENT '支付类型:1-支付宝支付,2-网银在线,3-银联,4-微信支付',
`gateway_pay_num` VARCHAR(30) DEFAULT NULL COMMENT '网关支付流水号',
`gateway_pay_time` DATETIME DEFAULT NULL COMMENT '网关支付时间',
`gateway_pay_price` INT(10) NOT NULL DEFAULT '0' COMMENT '网关实际支付金额',
`deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '删除标志,默认 0 不删除,1 删除',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='交易';
下篇文章开始具体介绍服务设计