基础环境搭建
使用微服务架构的分布式系统,微服务之间通过网络通信。我们通过服务提供者与服务消费者来描述微服务间的调用关系。
服务提供者:服务的被调用方,提供调用接口的一方
服务消费者:服务的调用方,依赖于其他服务的一方
我们以电商系统中常见的用户下单为例,用户向订单微服务发起一个购买的请求。在进行保存订单之前需要调用商品微服务查询当前商品库存,单价等信息。在这种场景下,订单微服务就是一个服务消费者,商品微服务就是一个服务提供者
数据库表
资料中提供了案例中所需要的数据库表与实体类
用户表
CREATE TABLE `tb_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(40) DEFAULT NULL COMMENT '用户名', `password` varchar(40) DEFAULT NULL COMMENT '密码', `age` int(3) DEFAULT NULL COMMENT '年龄', `balance` decimal(10,2) DEFAULT NULL COMMENT '余额', `address` varchar(80) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
商品表
CREATE TABLE `tb_product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `product_name` varchar(40) DEFAULT NULL COMMENT '名称', `status` int(2) DEFAULT NULL COMMENT '状态', `price` decimal(10,2) DEFAULT NULL COMMENT '单价', `product_desc` varchar(255) DEFAULT NULL COMMENT '描述', `caption` varchar(255) DEFAULT NULL COMMENT '标题', `inventory` int(11) DEFAULT NULL COMMENT '库存', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
订单表
CREATE TABLE `tb_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL COMMENT '用户id', `product_id` int(11) DEFAULT NULL COMMENT '商品id', `number` int(11) DEFAULT NULL COMMENT '数量', `price` decimal(10,2) DEFAULT NULL COMMENT '单价', `amount` decimal(10,2) DEFAULT NULL COMMENT '总额', `product_name` varchar(40) DEFAULT NULL COMMENT '商品名', `username` varchar(40) DEFAULT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
搭建环境
(1)创建父工程shop_parent
在IDEA中创建父工程 shop_parent 并引入坐标
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yyj</groupId> <artifactId>shop_parent</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>shop_service_order</module> <module>shop_service_product</module> <module>shop_service_user</module> <module>shop_service_common</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
(2)创建微服务工程模块
创建公共模块 shop_service_common,用于存放公共的实体类和工具类
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>shop_parent</artifactId> <groupId>com.yyj</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shop_service_common</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency> </dependencies> </project>
创建订单微服务模块 shop_service_order,并引入shop_service_common依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>shop_parent</artifactId> <groupId>com.yyj</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shop_service_order</artifactId> <dependencies> <dependency> <groupId>com.yyj</groupId> <artifactId>shop_service_common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
创建商品微服务模块 shop_service_product,并引入shop_service_common依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>shop_parent</artifactId> <groupId>com.yyj</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shop_service_product</artifactId> <dependencies> <dependency> <groupId>com.yyj</groupId> <artifactId>shop_service_common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
创建用户微服务模块 shop_service_user ,并引入shop_service_common依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>shop_parent</artifactId> <groupId>com.yyj</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>shop_service_user</artifactId> <dependencies> <dependency> <groupId>com.yyj</groupId> <artifactId>shop_service_common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
(3)设置依赖
工程的依赖结构如图 :