前置条件
介绍
本小节介绍如何在本地通过 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 {
    @Override
    public ExtraData getData() {
        ChoerodonRouteData choerodonRouteData = new ChoerodonRouteData();
        choerodonRouteData.setName("htdo");
        choerodonRouteData.setPath("/todo/**");
        choerodonRouteData.setServiceId("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-config
 - hzero-gateway
 - hzero-oauth
 - hzero-iam
 - hzero-swagger
 
 
.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
- 注意密码需要使用 Base64 加密

 
 - 注意密码需要使用 Base64 加密
 
.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 异常,可手动调用 
hzero-iam服务下的接口刷线权限和缓存权限 
