微服务项目整合
文章目录
一. 微服务项目整合
1. 下载项目代码
首先我们下载所需要得项目代码
大家可以直接访问此链接,下载代码,但是因为项目放在github上,我们可以用git直接把这个项目拉取下来。具体看我下面得截图。
https://github.com/shi469391tou/microservice-mallmanagement.git
2. 导进项目
打开MyEclipse,将刚刚各位下载得项目或者克隆得项目导进Myeclipse
3. 新建数据库和表信息
在启动咱们得工程项目前,我们需要设置本都数据库得一些信息。
通过查看项目microservice-orderservice的application.yml,我们看到它需要数据库信息
我们需要在mysql数据库中创建一个名为microservice_mallmanagement的数据库。
创建数据库和表的代码如下:
CREATE DATABASE microservice_mallmanagement;
USE microservice_mallmanagement;
DROP TABLE IF EXISTS `tb_order`;
CREATE TABLE `tb_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`createtime` datetime DEFAULT NULL,
`number` varchar(255) DEFAULT NULL,
`userid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=UTF8;
INSERT INTO `tb_order` VALUES ('1', '2017-10-09 10:15:44', '201709181459001', '1');
INSERT INTO `tb_order` VALUES ('2', '2017-10-24 18:22:12', '201709181459008', '1');
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`address` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=UTF8;
INSERT INTO `tb_user` VALUES ('1', 'beijing', 'shitou');
4. 修改代码:
在此我们需要做线下测试,所以我们将代码中的application.yml文件修改成本地测试,并将涉及到数据库的信息也改了,因为我们需要用自己的用户名和密码。
在此我只列出一个,其他的需要大家自己去找了。
5. 启动项目
商城管理系统的启动非常简单,只要运行各自的启动类即可。唯一需要注意的是,项目中的
microservice-gateway-zuul,microservice-mallmanagement和microservice-orderservice都注册到了microservice-eureka-server项目的服务注册中心上,所以必须先启动microservice-eureka-server项目,运行成功后才可以启动其他三个子项目。
启动完成之后,我们通过访问Eureka服务的注册中心,效果如下图所示:
从上图可以看出,所有服务均已正常启动,并且其他的三个子项目都正确的注册到了Eureka注册中心。
启动成功之后,即可对系统的功能进行测试,具体执行步骤如下:
(1) 测试接口方法。
分别通过microservice-orderservice和microservice-userservice两个微服务项目地址来访问各自暴露的API接口方法(http://localhost:7900/order/findOrders/1和http://localhost:8030/user/findOrders/shitou)进行测试,效果如下:
(2) 测试 API 网关服务。
针对上面的microservice-orderservice和microservice-userservice两个微服务项目,可以通过Zuul组件提供的API网关进行对应的接口代理测试(代理访问地址分别为:http://localhost:8050/order-service/user/findOrders/1和http://localhost:8050/user-service/user/findOrders/shitou ),效果分别下图所示:
二. 接口可视化工具——Swagger-UI
(一). Swagger-UI使用方法
1. 下载Swagger-UI项目
从 GitHub 上拉取Swagger-UI项目代码,具体的地址如下。
点此访问链接
2.引入Swagger-UI
找到本地下载好的Swagger-UI项目,进入项目并找到dist目录,将整个dist目录复制到所需要使用的Swagger-UI工具项目的resources 目录下。这里以micreseservice-userservice项目为例,效果如下图所示;
3. 加入Swagger依赖
在micreservice-userservice项目的pom文件中加入Swagger的依赖,具体如下所示。
<!-- Use Swagger UI for REST API test -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
4.编写配置类
在项目中创建一个Swagger-UI 的配置类 SwaggerConfiguration,并在该类中修改一些默认显示的API相关信息,其中最主要的时接口路径,编辑后如下所示:
package com.itheima.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StopWatch;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Date;
import static springfox.documentation.builders.PathSelectors.regex;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
//定义API接口映射路径
public static final String DEFAULT_INCLUDE_PATTERN = "/user/.*";
private final Logger log =
LoggerFactory.getLogger(SwaggerConfiguration.class);
@Bean
public Docket swaggerSpringfoxDocket() {
log.debug("Starting Swagger");
StopWatch watch = new StopWatch();
watch.start();
//用于生成对应API接口文档的描述信息,可省略
ApiInfo apiInfo = new ApiInfo("用户管理API接口测试文档","description",
"termsOfServiceUrl","contact","version","","");
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.genericModelSubstitutes(ResponseEntity.class)
.forCodeGeneration(true)
.genericModelSubstitutes(ResponseEntity.class)
.directModelSubstitute(java.time.LocalDate.class, String.class)
.directModelSubstitute(java.time.ZonedDateTime.class, Date.class)
.directModelSubstitute(java.time.LocalDateTime.class, Date.class)
.select()
.paths(regex(DEFAULT_INCLUDE_PATTERN))//匹配路径生成对应接口文档
.build();
watch.stop();
log.debug("Started Swagger in {} ms", watch.getTotalTimeMillis());
return docket;
}
}
(二). Swagger-UI 使用测试
1. 整合测试
重新启动所有整合了Swagger-UI接口文档工具的微服务项目,启动成功后,通过对应“服务地址IP + 端口 + /swagger-ui.html”请求路径即可进入测试页面,效果如下所示。
从上图可以看出,浏览器已显示出了Swagger-UI测试页面,并且页面中分别列出了各自接口控制器类user-controller和order-controller,这就说明项目与Swagger-UI 整合成功。
2.接口测试
以用户管理API接口测试文档为例,并单击user-controller面板,会展示出接口的所有方法(项目只有一个GET方法),再单击某个具体的方法会展示出详细信息,效果如下图所示:
从上图可以清楚的知道页面各部分信息的作用,我们主要关心的是具体的某个测试方法的参数。在参数信息输入框中填写username的参数值shitou(之前MySQL数据库初始化时插入的数据),然后单击“Try it out!”按钮即可进行测试,结果如果所示:
从上图可以看出,该方法正确查询出了username为shitou的用户订单信息,同时在结果上方还提供了另外的Curl和URL两种请求方式。如果项目的接口方法有所变更,只需要将对应服务重启,并刷新文档页面就会自动更新对应的方法。至此,接口测试工具Swagger-UI的具体配置以及与项目的整合使用就已经讲解完毕。
对Swagger-UI的使用感兴趣的读者可以根据需要自行与其他项目整合进行测试、也可以参
考Swagger-UI官方文档提供的使用方式学习更多的内容,具体参考地址为https//swagger.io
docslswagger-tools/#swagger-ui-documentation-29。