
h2. 方法校验:
{code:language=java|title=接口定义|linenumbers=true|firstline=0} public abstract Hello getHello(@Param(name="name") String name);
{code}
* 接口校验文件 /com/snda/service/hello/api/helloService-getHello-validation.xml
* 该文件的命名规则: api的包下 ServiceName(第一个字符小写)+“-”+endpointName+"validation.xml"
{code:language=xml|title=getHello方法的校验配置|linenumbers=true|firstline=1|theme=Eclipse}<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>{code}
h2. 客户端高级配置内容
{tip:title=客户端高级配置内容}{color:#333333}1、定义远程连接相关的 remote,每个remore 包含了 factory与Pool、authenticator(未实现){color}
{color:#333333}2、factory负责定义远程IP端口、以及与tcp相关缓冲区配置、包含传输过程采用的对象系列化方式{color}
{color:#333333}3、Pool 负责定义与远程IP所创建TCP连接的连接池配置{color}
{color:#333333}4、定义远程的Service列表,每个service关联一个remote{color}{tip}
{code:language=xml|title=VenusClient.xml 配置|linenumbers=true|theme=Eclipse}<?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>{code}
h2. 服务端的高级配置内容
{tip:title=服务端的高级配置内容}
{color:#333333}讲述服务如何配置,服务的拦截器配置以及服务版本约束{color}
{color:#333333}1、拦截器定义(interceptor){color}
{color:#333333}2、拦截器Stack定义(interceptor-stack){color}
{color:#333333}3、服务定义(包含 可接受的版本范围,该服务是否处于active状态(如果active=false,则服务不可用)),以及该服务使用的interceptor-stack{color}
{color:#333333}4、个性化Endpoint配置,只有你的某个endpoint需要个性化配置,才需要在service下描述该endpoint的配置,默认情况下是不需要对endpoint做配置{color}
{tip}
{code:language=xml|title=VenusServices.xml 配置|linenumbers=true|firstline=1|theme=Eclipse}
<?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>