1. 程式人生 > >SpringBoot(八) 整合dubbo

SpringBoot(八) 整合dubbo

1、新建maven分模組專案

   1.1 若是新建專案為一個maven project專案,子專案皆為maven module模組  則需要在pom父專案的pom.xml中新增springboot的parent依賴。本例以1.1為準。

   1.2 若新建為多個maven project專案,則需要在每一個專案的pom.xml中新增spring boot的parent依賴。這種情況搭建springboot的dubbo專案 詳見部落格 https://blog.csdn.net/w_t_y_y/article/details/81186168

2、新建maven專案多模組框架

  2.1 新建maven專案為父專案(pom方式)本例父專案命名為bootDemo。  新建完成後刪除父專案下面的src目錄,只保留pom.xml檔案

  2.2 在父專案bootDemo上新建四個maven module子模組  分別命名為 bootDemo-api(jar方式),bootDemo-core(jar方式),bootDemo-service(jar方式),bootDemo-web(war方式),專案結構如下圖所示

3、pom配置

   3.1 由於在pom.xml中只能存在一個parent的標籤,所以這裡在父專案bootDemo的pom.xml中配置springboot的parent標籤。         bootDemo的pom.xml如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zw</groupId>
	<artifactId>bootDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<!-- springBoot -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
	</parent>

	<modules>
		<!-- <module>bootDemo-web</module> -->
		<module>bootDemo-web</module>
		<module>bootDemo-api</module>
		<module>bootDemo-service</module>
		<module>bootDemo-core</module>
	</modules>

</project>

    3.2 bootDemo-core的pom.xml如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>bootDemo</artifactId>
    <groupId>com.zw</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.zw</groupId>
  <artifactId>bootDemo-core</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

   3.3 bootDemo-api的pom.xml如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>bootDemo</artifactId>
    <groupId>com.zw</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.zw</groupId>
  <artifactId>bootDemo-api</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
  	<dependency>
  	  <groupId>com.zw</groupId>
	  <artifactId>bootDemo-core</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
  	</dependency>
  </dependencies> 
  
</project>

   3.4 bootDemo-service的pom.xml如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<artifactId>bootDemo</artifactId>
		<groupId>com.zw</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.zw</groupId>
	<artifactId>bootDemo-service</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<!-- 專案依賴 -->
		<dependency>
			<groupId>com.zw</groupId>
			<artifactId>bootDemo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<!-- springboot-web依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- springboot-dubbo依賴 -->
		<dependency>
			<groupId>com.alibaba.spring.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>

		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>

		<!-- 資料庫 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.21</version>
		</dependency>
		<dependency>
			<groupId>oracle</groupId>
			<artifactId>ojdbc</artifactId>
			<version>1.4</version>
		</dependency>

		<!-- jdbcTemplate -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!-- redis -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

		<!-- springboot-junit -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

	</dependencies>
</project>

   3.5 bootDemo-web的pom.xml如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<artifactId>bootDemo</artifactId>
		<groupId>com.zw</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.zw</groupId>
	<artifactId>bootDemo-web</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<dependencies>
		<!-- 專案依賴 -->
		<dependency>
			<groupId>com.zw</groupId>
			<artifactId>bootDemo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<!-- springboot-web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!-- springboot-dubbo -->
		<dependency>
			<groupId>com.alibaba.spring.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>

		<!-- springboot-log4j -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j</artifactId>
			<version>1.3.8.RELEASE</version>
		</dependency>

		<!-- springboot-swagger2 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.6.1</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.6.1</version>
		</dependency>

	</dependencies>
</project>

4、 application.properties配置

   4.1 bootDemo-service 屬性檔案的配置

zw.name=寶寶
zw.age=20

#時間格式化
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#時區設定
spring.jackson.time-zone=Asia/Chongqing

#mysql
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/boottest?useUnicode=true&characterEncoding=utf-8&useSSL=false
#spring.datasource.username=root
#spring.datasource.password=
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@172.31.1.70:1521:SGY
spring.datasource.username=
spring.datasource.password=

#mybatis.mapper-locaitons=classpath:mapper/*.xml
#mybatis.typeAliasesPackage=com.zw.dao
#指定mybatis所對應的xml檔案目錄
mybatis.mapper-locations=classpath*:mapper/*Dao.xml
#mybatis.type-aliases-package=com.zw.domain


#返回的字首   目錄對應src/main/webapp下
spring.mvc.view.prefix:/WEB-INF/jsp/
#返回的字尾
spring.mvc.view.suffix: .jsp

#伺服器啟動埠
server.port=8081

#郵箱配置
mail.smtp.auth=true
mail.transport.protocol=smtp
mail.send.charset=UTF-8
mail.smtp.port=465
mail.is.ssl=true
mail.host=smtp.163.com
[email protected]
mail.auth.password=weisian151
mail.smtp.timeout=5000


#redis
spring.redis.host=172.31.1.127
spring.redis.port=6379
spring.redis.password=
spring.redis.database=1
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=500
spring.redis.pool.min-idle=0
spring.redis.timeout=0

   4.2 bootDemo-web 屬性檔案的配置


#spring.dubbo.application.name=img-test
#spring.dubbo.registry.address=zookeeper://127.0.0.1
#spring.dubbo.registry.port=2181
#spring.dubbo.base-package=com.demo.service
#spring.dubbo.protocol.name=dubbo
server.port=8888

#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/boottest?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=

# Log4j配置
log4j.rootCategory=ERROR,stdout

# 控制檯輸出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

5、按照之前的部落格整合mybatis,jdbcTemplet,redis和log4j,swagger,完成mapper檔案的配置Swagger.java,和RedisUtil.java檔案的編寫和配置

6、dubbo配置檔案 pom在之前的配置中已經配置

  6.1 在bootDemo-service中配置provide.xml檔案作為提供者,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 服務應用名稱 -->
    <dubbo:application name="springboot-service"/>
    <!-- 使用zookeeper做為註冊中心 -->
    <dubbo:registry  protocol="zookeeper" address="zookeeper://127.0.0.1:2181"  register="false"/>
    
   
	<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
	<!-- 用dubbo協議在20880埠暴露服務 -->
	<dubbo:protocol name="dubbo" port="20881" />
    
    <!-- ref中的值要跟服務實現類中的@Server的值一致 -->
    <dubbo:service interface="com.zw.service.StudentService" ref="studentService"></dubbo:service>
    <!--  <dubbo:service interface="com.zw.service.EmailService" ref="emailService"></dubbo:service>
     -->
</beans>

   6.2 在bootDemo-web中配置consumer.xml檔案作為消費者,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<dubbo:application name="springboot-rest"></dubbo:application>

	<!-- zookeeper作為註冊中心 -->
	<dubbo:registry protocol="zookeeper" address="zookeeper://127.0.0.1:2181" />
	<!-- 生成遠端服務代理 -->
	<dubbo:reference interface="com.zw.service.StudentService"
		id="studentService" url="dubbo://127.0.0.1:20881" />
	<!-- <dubbo:reference interface="com.zw.service.EmailService"
		id="emailService" url="dubbo://127.0.0.1:20881" /> -->
</beans>

7、啟動類配置

   7.1  bootDemo-service的啟動類如下:

   

package com.zw;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
//mabits需要
@MapperScan("com.zw.dao")
//啟動dubbo需要
@ImportResource("classpath:provider.xml")
//啟動快取
@EnableCaching
public class ServiceStart {
	
	public static void main(String[] args) {
		SpringApplication.run(ServiceStart.class, args);
	}
}

   7.2  bootDemo-web的啟動類如下:

package com.zw;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

@SpringBootApplication
@EnableDubboConfiguration
@ImportResource("classpath:consumer.xml")
@EnableSwagger2
public class RestStart {
	public static void main(String[] args) {
		SpringApplication.run(RestStart.class, args);
	}
}

8、正常編寫介面,注意註解的使用

9、啟動service服務,再次啟動rest服務,在瀏覽器中根據日誌的埠,輸入網址進行驗證。也可直接用swagger網址驗證是否正常啟動和呼叫 。如:http://localhost:8888/student/select   或者http://localhost:8888/swagger-ui.html

10、對於eclipse可能會出現consumer.xml中部分標籤不能識別的問題,可不必關心,不影響正常使用。一般因為不能識別dubbo.xsd檔案報錯,想要去除錯誤,可以下載一個dubbo.xsd到本地,然後在windows-->pereferencs-->xml-->xml catalog-->add-->catalog entry-->file system 選擇自己下載的xsd檔案,然後在下面生成的key目錄中後面新增/dubbo.xsd,在確認,如下圖

一路ok下去,最後在專案上右鍵-->validate即可。

附上dubbo.xsd檔案內容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://code.alibabatech.com/schema/dubbo"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:tool="http://www.springframework.org/schema/tool"
	targetNamespace="http://code.alibabatech.com/schema/dubbo">
	
	<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
	<xsd:import namespace="http://www.springframework.org/schema/beans"/>
	<xsd:import namespace="http://www.springframework.org/schema/tool"/>

	<xsd:annotation>
		<xsd:documentation><![CDATA[ Namespace support for the dubbo services provided by dubbo framework. ]]></xsd:documentation>
	</xsd:annotation>
	
	<xsd:complexType name="abstractMethodType">
		<xsd:attribute name="timeout" type="xsd:string" use="optional" default="0">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The method invoke timeout. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="retries" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The method retry times. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="actives" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The max active requests. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="connections" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The exclusive connections. default share one connection. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="loadbalance" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The method load balance. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="async" type="xsd:string" use="optional" default="false">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The method does async. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="sent" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The async method return await message sent ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="mock" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Use service mock implemention. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="merger" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The multi-group result merger ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="validation" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Use service jsr303 validation, true/false. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="cache" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Use service cache, lru/threadlocal/jcache. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="abstractInterfaceType">
		<xsd:complexContent>
			<xsd:extension base="abstractMethodType">
				<xsd:attribute name="id" type="xsd:ID">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The unique identifier for a bean. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="local" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Use service local implemention. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="stub" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Use service local implemention. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="proxy" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Use proxy factory. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="cluster" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Use cluster strategy. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="filter" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The filter. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="listener" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The listener. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="owner" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The owner. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="layer" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ layer info. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="application" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service application. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="module" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service module. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="registry" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service registry. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="monitor" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service monitor. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="callbacks" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The callback instance limit peer connection.]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="onconnect" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service client connected. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="ondisconnect" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service client disconnected. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="scope" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Defines the service visibility, choise:[local remote]. default is remote, which can be invoked by network。  ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="abstractReferenceType">
		<xsd:complexContent>
			<xsd:extension base="abstractInterfaceType">
				<xsd:attribute name="version" type="xsd:string" use="optional" default="0.0.0">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service version. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="group" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service group. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="check" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Check dependency providers. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="init" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Eager init reference. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="generic" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Generic service. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="injvm" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[Deprecated. Replace to  set scope=local ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="sticky" type="xsd:string" use="optional">
						<xsd:annotation>
							<xsd:documentation><![CDATA[ Enable/Disable cluster sticky policy.Default false ]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				<xsd:attribute name="reconnect" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ remoting reconnect timer. false represent close reconnect. integer represent interval(ms) .default true(2000ms).]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="lazy" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ lazy create connection. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="abstractServiceType">
		<xsd:complexContent>
			<xsd:extension base="abstractInterfaceType">
                <xsd:attribute name="register" type="xsd:string" use="optional">
                    <xsd:annotation>
                        <xsd:documentation><![CDATA[ The service can be register to registry. ]]></xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
				<xsd:attribute name="version" type="xsd:string" use="optional" default="0.0.0">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service version. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="group" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service group. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="deprecated" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ whether the service is deprecated. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="delay" type="xsd:string" use="optional" default="0">
	               	<xsd:annotation>
	               		<xsd:documentation>
	               			<![CDATA[ The service export delay millisecond. ]]>
	               		</xsd:documentation>
	               	</xsd:annotation>
	            </xsd:attribute>
	            <xsd:attribute name="export" type="xsd:string" use="optional">
	               	<xsd:annotation>
	               		<xsd:documentation>
	               			<![CDATA[ The service is export. ]]>
	               		</xsd:documentation>
	               	</xsd:annotation>
	            </xsd:attribute>
	            <xsd:attribute name="weight" type="xsd:string" use="optional">
	               	<xsd:annotation>
	               		<xsd:documentation>
	               			<![CDATA[ The service weight. ]]>
	               		</xsd:documentation>
	               	</xsd:annotation>
	            </xsd:attribute>
	            <xsd:attribute name="document" type="xsd:string" use="optional">
	               	<xsd:annotation>
	               		<xsd:documentation>
	               			<![CDATA[ The service document. ]]>
	               		</xsd:documentation>
	               	</xsd:annotation>
	            </xsd:attribute>
				<xsd:attribute name="dynamic" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ the service registered to the registry is dynamic(true) or static(false). ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="token" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service use token. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="accesslog" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service use accesslog. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="executes" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service allow execute requests. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="protocol" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service protocol. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:anyAttribute namespace="##other" processContents="lax" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="applicationType">
		<xsd:attribute name="id" type="xsd:ID">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The unique identifier for a bean. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="name" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application name. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="version" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application version. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="owner" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application owner name (email prefix). ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="organization" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The organization name. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="architecture" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The architecture. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="environment" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application environment, eg: dev/test/run ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="compiler" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The java code compiler. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="logger" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application logger. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="registry" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application registry. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="monitor" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The application monitor. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="moduleType">
		<xsd:attribute name="id" type="xsd:ID">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The unique identifier for a bean. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="name" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The module name. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="version" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The module version. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="owner" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The module owner name (email prefix). ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="organization" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The module organization. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="registry" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The module registry. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="monitor" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The module monitor. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="registryType">
		<xsd:sequence minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The unique identifier for a bean. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="address" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry address. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="port" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry default port. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="protocol" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry lookup protocol. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="username" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry username. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="password" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry password. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="transport" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol transporter type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="transporter" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol transporter type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="server" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol server type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="client" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol client type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="cluster" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry cluster type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="group" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry group. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="version" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry version. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="timeout" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The request timeout. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="session" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The session timeout. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="file" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The registry adddress file store. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="wait" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The wait time for shutdown. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="check" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Check registry status on stratup. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dynamic" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ the service registered to this registry is dynamic(true) or static(false). ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="register" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ register service to this registry(true) or not(false). ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="subscribe" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ subscribe service to this registry(true) or not(false). ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="monitorType">
		<xsd:sequence minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="address" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The monitor address. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="protocol" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The monitor protocol. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="username" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The monitor username. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="password" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The monitor password. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="group" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The monitor group. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="version" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The monitor version. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="parameterType">
		<xsd:attribute name="key" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The parameter key. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="value" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The parameter value. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="hide" type="xsd:boolean" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Hide parameter. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="methodType">
		<xsd:complexContent>
			<xsd:extension base="abstractMethodType">
				<xsd:choice minOccurs="0" maxOccurs="unbounded">
					<xsd:element ref="argument" minOccurs="0" maxOccurs="unbounded" />
					<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
				</xsd:choice>
				<xsd:attribute name="name" type="xsd:string" use="required">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The method name (method.toString()). ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="executes" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The max active requests. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="stat" type="xsd:string" use="optional" default="-1">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The method parameter index for statistics. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="retry" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Deprecated. Replace to retries. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="reliable" type="xsd:string" use="optional" default="false">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Deprecated. Replace to napoli protocol. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="deprecated" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The method deprecated. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="sticky" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Enable/Disable cluster sticky policy.Default false ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="return" type="xsd:string" use="optional" >
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Method result is return. default is true.]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="oninvoke" type="xsd:string" use="optional" >
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Method invoke trigger.]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="onreturn" type="xsd:string" use="optional" >
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Method return trigger. return attribute must be true.]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="onthrow" type="xsd:string" use="optional" >
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Method on error trigger.return attribute must be true.]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="argumentType">
		<xsd:attribute name="index" type="xsd:string" use="optional" >
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The argument index. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="type" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The argument type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="callback" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The argument is callback. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>
	
	<xsd:complexType name="consumerType">
		<xsd:complexContent>
			<xsd:extension base="abstractReferenceType">
				<xsd:sequence minOccurs="0" maxOccurs="unbounded">
					<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
				</xsd:sequence>
				<xsd:attribute name="default" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:anyAttribute namespace="##other" processContents="lax" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="referenceType">
		<xsd:complexContent>
			<xsd:extension base="abstractReferenceType">
				<xsd:choice minOccurs="0" maxOccurs="unbounded">
					<xsd:element ref="method" minOccurs="0" maxOccurs="unbounded" />
					<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
				</xsd:choice>
				<xsd:attribute name="interface" type="xsd:token" use="required">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service interface class name. ]]></xsd:documentation>
						<xsd:appinfo>
							<tool:annotation>
								<tool:expected-type type="java.lang.Class"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="url" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Provider list url. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="client" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Protocol transport client type. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="consumer" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Deprecated. Replace to reference-default. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="protocol" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service protocol. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:anyAttribute namespace="##other" processContents="lax" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:complexType name="protocolType">
		<xsd:sequence minOccurs="0" maxOccurs="unbounded">
			<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:ID">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The unique identifier for a bean. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="name" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol name. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="host" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The service host. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="port" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The service port. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="threadpool" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The thread pool type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="threads" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The thread pool size. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="iothreads" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The IO thread pool size. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="queues" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The thread pool queue size. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="accepts" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The accept connection size. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="codec" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol codec. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="serialization" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol serialization. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="charset" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol charset. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="payload" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The max payload. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="buffer" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The buffer size. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="heartbeat" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The heartbeat interval.(ms) ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="accesslog" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol use accesslog. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="telnet" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol use telnet commands. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="prompt" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol telnet prompt. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="status" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol check status. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="transporter" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol transporter type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="exchanger" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol exchanger type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dispather" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Deprecated. replace to "dispatcher". ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="dispatcher" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol dispatcher type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="networker" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol "networker" type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="server" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol server type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="client" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol client type. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="path" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol context path. replace to "contextpath". ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="contextpath" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol context path. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="register" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ The protocol can be register to registry. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default" type="xsd:string" use="optional">
			<xsd:annotation>
				<xsd:documentation><![CDATA[ Is default. ]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:anyAttribute namespace="##other" processContents="lax" />
	</xsd:complexType>
	
	<xsd:complexType name="providerType">
		<xsd:complexContent>
			<xsd:extension base="abstractServiceType">
				<xsd:choice minOccurs="0" maxOccurs="unbounded">
					<xsd:element ref="service" minOccurs="0" maxOccurs="unbounded" />
					<xsd:element ref="parameter" minOccurs="0" maxOccurs="unbounded" />
				</xsd:choice>
				<xsd:attribute name="host" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service host. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="port" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The service port. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="threadpool" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The thread pool type. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="threads" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The thread pool size. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="iothreads" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The IO thread pool size. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="queues" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The thread pool queue size. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="accepts" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The accept connection size. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="codec" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The protocol codec. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="serialization" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The protocol serialization. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="charset" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The protocol charset. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="payload" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The max payload. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="buffer" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The buffer size. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="transporter" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The protocol transporter type. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="exchanger" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The protocol exchanger type. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="dispather" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ Deprecated. replace to "dispatcher". ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="dispatcher" type="xsd:string" use="optional">
					<xsd:annotation>
						<xsd:documentation><![CDATA[ The protocol dispatcher type. ]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="networker" type="xsd:string" use="optional">
					<xs