2. 高级使用指南

转至元数据结尾
转至元数据起始

方法校验:

接口定义
    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">100</property>
				<property name="maxIdle">100</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>


	<!--
		多版本以及服务的高级配置:

		这儿是服务申明。每个服务包含了服务接口,拦截器堆,是否激活状态。
		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>
Enter labels to add to this page:
Please wait 
查找标签? 在此录入。
  1. 2017-Aug-08

    匿名用户 发表:

    在哪能看到源码啊?不是开源的吗

    在哪能看到源码啊?不是开源的吗

添加评论