方法校验:
接口定义
public abstract Hello getHello(@Param(name="name") String name);
- 接口校验文件 /com/snda/service/hello/api/helloService-getHello-validation.xml
- 该文件的命名规则: api的包下 ServiceName(第一个字符小写)“-”+endpointName"validation.xml"
getHello方法的校验配置
<validators> <field name="name"> <field-validator type="requiredstring"> <property name="message">name is needed</property> </field-validator> <field-validator type="stringlength"> <property name="minLength">10</property> <property name="maxLength">20</property> <property name="message">length of name must be between %{minLength} and %{maxLength}.</property> </field-validator> </field> </validators>
客户端高级配置内容
![]() | 客户端高级配置内容 1、定义远程连接相关的 remote,每个remore 包含了 factory与Pool、authenticator(未实现) 2、factory负责定义远程IP端口、以及与tcp相关缓冲区配置、包含传输过程采用的对象系列化方式 3、Pool 负责定义与远程IP所创建TCP连接的连接池配置 4、定义远程的Service列表,每个service关联一个remote |
VenusClient.xml 配置
<?xml version="1.0" encoding="utf8"?> <venus-client> <remotes> <!-- 定义远程相关的配置 --> <remote name="defaultRemote"> <!-- 与远程连接的socket相关的配置 --> <factory> <!-- 支持多节点负责均衡的高可用配置,默认采用轮询 --> <property name="ipAddressList">192.168.0.2:16800,192.168.0.2:16801</property> <!-- socket的sendBuffer缓冲区大小,单位:K --> <property name="sendBufferSize">64</property> <!-- socket的receiveBuffer缓冲区大小,单位:K --> <property name="receiveBufferSize">64</property> </factory> <!-- 与每个远程节点的连接池配置,与apache的commons-pool配置一致 --> <pool> <property name="maxActive">500</property> <property name="maxIdle">500</property> <property name="minIdle">10</property> <property name="minEvictableIdleTimeMillis">60000</property> <property name="timeBetweenEvictionRunsMillis">60000</property> <property name="testOnBorrow">true</property> <property name="testWhileIdle">true</property> </pool> <!-- 用户名、密码认证方式 --> <authenticator class="com.meidusa.venus.client.authenticate.UserPasswordAuthenticator"> <property name="username">venus</property> <property name="password">venus</property> <!-- 对象系列化方式,目前支持3种 : 0:json ,1:bson , 2: java对象系列化 --> <property name="serializeType">${venus.service.helloService.serializeType}</property> </authenticator> <!-- 采用 Dummy方式 认证(默认),可以不用配置 --> <!-- <authenticator class="com.meidusa.venus.client.authenticate.DummyAuthenticator"> <property name="serializeType">${venus.service.helloService.serializeType}</property> </authenticator> --> </remote> </remotes> <!-- 服务接口列表 --> <services> <!-- 定义服务以及指定该服务提供方的远程相关配置 --> <service type="com.meidusa.venus.hello.api.HelloService" remote="defaultRemote"> <endpoint name="getHello" soTimeout="2000"/> </service> </services> </venus-client>
服务端的高级配置内容
![]() | 服务端的高级配置内容 讲述服务如何配置,服务的拦截器配置以及服务版本约束 1、拦截器定义(interceptor) 2、拦截器Stack定义(interceptor-stack) 3、服务定义(包含 可接受的版本范围,该服务是否处于active状态(如果active=false,则服务不可用)),以及该服务使用的interceptor-stack 4、个性化Endpoint配置,只有你的某个endpoint需要个性化配置,才需要在service下描述该endpoint的配置,默认情况下是不需要对endpoint做配置 |
VenusServices.xml 配置
<?xml version="1.0" encoding="utf8"?> <venus-server> <!-- xml中通用的配置: 所有元素在属性为class可以填写类名字,也可以填写spring容器中的beanId,但必须用符号 ${}来引用, 比如 : ${myInterceptor} ,这儿的myInterceptor是spring的配置文件中已经申明了。 在property中的内容也可以采用符号${},引用spring中声明的类进行注入。 --> <!-- 这儿定义 拦定义截器,每个venus文件都可以有自己的拦截器定义,定义以后才可以为拦截器堆 提供拦截器 --> <interceptors> <!-- 监控拦截器,正在研发 --> <!-- <interceptor name="monitor-interceptor" class="com.meidusa.venus.backend.interceptor.MonitorInterceptor"/> --> <!-- 访问控制拦截器 --> <interceptor name="acl-interceptor" class="com.meidusa.venus.backend.interceptor.AccessControlInterceptor"/> <!-- 参数校验拦截器 --> <interceptor name="validator-interceptor" class="com.meidusa.venus.backend.interceptor.ValidatorInterceptor"/> <!-- 缓存支持拦截器 --> <interceptor name="cacheable-interceptor" class="com.meidusa.venus.backend.interceptor.CacheableInterceptor"> <property name="cacheClient">${memcachedClient}</property> </interceptor> <!-- 自定义拦截器 --> <interceptor name="MyInterceptor" class="com.meidusa.venus.hello.interceptor.MyInterceptor"> <property name="name">baby</property> <property name="first">true</property> </interceptor> </interceptors> <!-- 拦截器堆定义,拦截堆可以包含多个拦截器,也可以包含多个其他拦截器堆。 在endpoint执行过程中,堆的执行循序是从上而下串行执行的 --> <interceptor-stacks> <interceptor-stack name="helloService-stack" > <interceptor-ref name="monitor-interceptor"/> <interceptor-ref name="acl-interceptor"/> <interceptor-ref name="validator-interceptor"/> <interceptor-ref name="cacheable-interceptor"/> <interceptor-ref name="MyInterceptor"/> </interceptor-stack> <interceptor-stack name="helloService-other-stack" > <interceptor-ref name="MyInterceptor"/> </interceptor-stack> </interceptor-stacks> <!-- {info}多版本以及服务的高级配置: {info} 这儿是服务申明。每个服务包含了服务接口,拦截器堆,是否激活状态。 active : 布尔类型, 默认为true,如果false,则该服务不对外提供。 version:整型范围,表示该服务能够兼容的版本,0,2 表示 兼容最小版本为0,最大版本为2 符号:[] --表示范围:[1,10] 即能够支持版本范围1~10版本的客户端API的请求调用 符号:{} --表示枚举:{1,2,3,4,5} 即能够支持1、2、3、4、5版本的客户端API的请求调用 interceptor-stack : 拦截器堆名字。如果设置了拦截器堆,则服务在执行前后会执行相关拦截器,service上可以配置,endpoint也可以配置, 如果没有配置endpoint则采用service上的拦截器堆配置。 每个服务包含多个endpoint 端口的特殊描述。endpoint可有可无,如果有特殊对待,则需要在这儿声明,默认是将每个服务接口的Endpoint都暴露出来。 instance元素:是服务接口实现的具体实例。 --> <services> <service type="com.meidusa.venus.hello.api.HelloService" interceptor-stack="helloService-stack" active="true" version="[0,2]"> <instance class="com.meidusa.venus.hello.impl.DefaultHelloService"> <property name="greeting">hello venus hello service</property> </instance> <endpoint name="sayHello" active="true"/> <endpoint name="getHello" interceptor-stack="helloService-other-stack" active="true"> <interceptor-config interceptor-ref="cacheable-interceptor"? class=com.meidusa.venus.backend.interceptor.config.CacheableInterceptorConfig"> <property name="key">%{name}</property> <property name="operation">GET</property> </interceptor-config> <!-- use cache <cache> <key>${name}</key> </cache> need privileges <privileges>GET_HELLO</privileges> --> </endpoint> </service> </services> </venus-server>