服务注解


UBSI的服务注解包括:

  • @UService - 声明微服务
  • @USFilter - 声明过滤器
  • @USDepend - 声明服务的依赖关系

@UService

用来标注Java Class,将其声明为一个微服务,例如:

package my.service.samples;

import rewin.ubsi.annotation.*;
import rewin.ubsi.container.ServiceContext;

@UService(
    name = "my.samples.demo",           // 微服务的名字,缺省为""
    tips = "测试服务",                   // 微服务的说明,缺省为""
    version = "1.0.0",                  // 接口的版本号,缺省为"0.0.1"
    release = false,                    // 版本发行状态:true 或 false,缺省为false
    depend = {                          // 依赖的其他微服务,缺省为{}
        @USDepend(                      // 第一个依赖,可以有多个
            name = "my.samples.xxx",    // 依赖的微服务的名字
            version = "",               // 该微服务的最小版本
            release = false             // 该微服务是否必须是"release"状态
        )
    },
    container = "1.0.1",                // 依赖的容器的版本号(1.0.1版本开始支持),缺省为""
    syslib = { "jaxen-1.2.0.jar" },        // 需要加载到SystemClassLoader中的Jar包,缺省为{}(容器版本>=1.0.1)
    singleton = false                    // 本服务为单例服务,可以部署多实例,在部署了redis注册中心的环境中,容器会保证只有1个实例在运行,其他实例会处于"单例等待"状态(备用),缺省为false(容器版本>=2.0.0)
)
public class DemoService {
    // 这是一个UBSI微服务,请注意:
    //   class的声明必须是public,并且有无参数的构造函数
}

@USFilter

用来声明一个UBSI微服务的过滤器,除了没有"name/singleton"属性,其他都跟@UService相同,示例如下:

/** 这是一个UBSI Filter */
@USFilter(
    tips = "这是一个filter"
)
public class DemoFilter {
    @USBefore
    public void before(ServiceContext ctx) throws Exception {
        ctx.getLogger().info("服务容器开始处理一个服务请求");
    }

    @USAfter
    public void after(ServiceContext ctx) throws Exception {
        ctx.getLogger().info("服务容器已经完成一个服务请求的处理");
    }
}

@USFilter与@UService都是由服务容器(Container)加载运行的Class,但与@UService不同,@USFilter不提供对外的访问接口,而是可以通过@USBefore/@USAfter定义的入口拦截本容器所有的服务请求,从而可以记录或改变处理行为。

@USDepend

用在@UService/@USFilter注解的depend属性中,声明依赖的其他微服务,示例请见@UService注解。

results matching ""

    No results matching ""