前置条件
- 开发环境配置:开发环境安装
- Demo程序已经开发完毕,详见 开发Demo程序
- DEMO程序源码:hzero-todo-service.zip
介绍
本小节介绍如何在本地通过 HZERO
来进行微服务开发。
本地测试
- 本地测试不需要注册到注册中心上,只需起本地一个服务即可,一般使用 postman 进行接口测试。
.1 准备工作
- 本地测试不需要用户登录,首先注释掉启动类上的
@EnableChoerodonResourceServer
注解,该注解开启了 Jwt_Token 的校验,本地测试不需要。 - 关闭 Spring Security 的安全配置,在
config
包下加入配置类,但不要把这个配置提交到 git 仓库,只适用于本地测试。
package org.hzero.todo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 禁用 security basic 验证
http.httpBasic().disable();
// 禁用 csrf
http.csrf().disable();
}
}
.2 启动 todo
服务
进入hzero-todo-service
目录下,运行以下命令启动本地项目
mvn clean spring-boot:run
.3 API 测试
- 例如使用 postman 测试,访问本地服务地址和端口
localhost:8088/v1/0/tasks
- 本地开发服务,如果不调用其他服务,则不需要注册中心,也不需要注册到注册中心上,在
TodoServiceApplication
中不需要添加@EnableEurekaClient
注解。
集成测试
- 集成测试即将本地服务注册到注册中心,通过
swagger
测试API 或者postman
测试API,此过程需要用户登录,所有API通过网关发起请求。
.1 服务注册
- 在
TodoApplication
中添加@EnableDiscoveryClient
注解。 - 在
application.yml
中添加注册中心客户端的配置,这里默认使用 Eureka 注册中心。
eureka:
instance:
# 以IP注册到注册中心
preferIpAddress: ${EUREKA_INSTANCE_PREFER_IP_ADDRESS:true}
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10
# 服务的一些元数据信息
metadata-map:
VERSION: 0.11.0
client:
serviceUrl:
# 注册中心地址,多个用逗号隔开
defaultZone: ${EUREKA_DEFAULT_ZONE:http://dev.hzero.org:8000/eureka}
registryFetchIntervalSeconds: 10
disable-delta: true
- 如果本地是在一个局域网内,一般情况下需要关闭本地防火墙,服务器才能访问到本地的服务
- 如果本地有多块网卡,如本地有虚拟机、VPN 等,需要在配置文件中指定注册的IP网段,否则服务器上访问到其它网段可能导致访问不通本地服务。
spring:
cloud:
inetutils:
# 本地多网卡时,忽略回环网卡
ignored-interfaces[0]: lo
# 本地多网卡时,选择注册的网段
preferred-networks[0]: xx.xx
.2 配置服务路由
- 服务路由配置类一般放在
config
包下,定义了服务路由,才能通过路由找到服务 - 服务路由配置类需实现
ExtraDataManager
接口,在getData
方法中定义服务的路由信息name
:服务简码path
:服务路由serviceId
:服务名
- 或者以管理员权限登录平台,在
平台治理
->服务管理
->服务路由
中添加对应服务的路由信息。
package org.hzero.todo.config;
import io.choerodon.core.swagger.ChoerodonRouteData;
import io.choerodon.swagger.annotation.ChoerodonExtraData;
import io.choerodon.swagger.swagger.extra.ExtraData;
import io.choerodon.swagger.swagger.extra.ExtraDataManager;
/**
* 服务路由配置
*/
@ChoerodonExtraData
public class TodoExtraDataManager implements ExtraDataManager {
@Autowired
private org.springframework.core.env.Environment environment;
@Override
public ExtraData getData() {
ChoerodonRouteData choerodonRouteData = new ChoerodonRouteData();
choerodonRouteData.setName(environment.getProperty("hzero.service.current.name", "htdo"));
choerodonRouteData.setPath(environment.getProperty("hzero.service.current.path", "/todo/**"));
choerodonRouteData.setServiceId(environment.getProperty("hzero.service.current.service-name", "hzero-todo-service"));
extraData.put(ExtraData.ZUUL_ROUTE_DATA, choerodonRouteData);
return extraData;
}
}
.3 接口权限
HZERO 的接口权限遵循 RBAC
。需要在接口上添加 @Permission()
注解。
包含如下参数。
参数名 | 说明 |
---|---|
level | 接口层级,ResourceLevel.SITE ,ResourceLevel.ORGANIZATION 两种 |
permissionLogin | 登录允许访问,默认为false |
permissionPublic | 公开接口,默认为false |
其中如果层级为租户层,则接口的 mapping
中必须包含 organization_id
或 organizationId
作为参数变量,否则网关校验权限时会校验不通过。
Swagger 测试
-
由于HZERO 包含的服务比较多和依赖的组件较多。一般不会在本地将所有的服务都启动,只会根据自己的需要启动对应的服务。建议在服务器搭建一套环境,本地做服务的单体测试,服务器上进行集成测试。
-
如果需要集成到HZERO服务器环境进行集成测试,则需要保证服务器至少正常运行如下基础服务:
- hzero-register
- hzero-admin
- hzero-gateway
- hzero-oauth
- hzero-iam
- hzero-swagger
- hzero-platform
.1 选择测试服务
-
Swagger地址:http://dev.hzero.org:8080/swagger/swagger-ui.html
-
通过服务列表选择需要测试的服务
![] (/img/docs/development-guide/backend-develop-guid/demo/demo_1564307143.png)
.2 用户认证
-
第一次访问 Swagger 时,需要登录认证后才能测试API
-
点击红色感叹号,点击 Authroize 按钮跳转到用户认证页面,系统默认密码为
admin/Admin@123
.3 API 测试
-
登录成功,跳转到 Swagger 页面之后,就可以开始API测试了
POSTMAN 测试
- 在集成环境下,有时候我们并不想使用 swagger 测试,也可以使用 postman 来做测试。
.1 获取授权 access_token
-
有多种方式可以获得用户登录之后的 access_token,最简单就是在页面上登录之后,直接从控制台获取,如下
-
Swagger API 调用
-
浏览器控制台
-
-
请求 oauth 服务 /oauth/token 接口获取 access_token
-
注意密码需要使用 RSA 加密
-
RSA 加密:可在 [开发管理>系统工具] 下获取RSA加密后的密钥
-
.2 API 测试
-
首先设置 Authentication 请求头,加入 access_token
-
访问网关地址,测试API,
http://dev.hzero.org:8080/todo/v1/0/tasks
文档刷新
-
如果修改了接口信息,但是 Swagger 上未及时更新,可手动调用
hzero-swagger
下的接口刷新 Swagger 文档信息 -
serviceName
为服务名称,version
取配置文件中eureka.instance.metadata-map.VERSION
配置。
刷新权限
-
如果调用接口抛出 PERMISSION_MISSMATCH 异常,可在 [开发管理>系统工具] 下刷新服务权限