-
Notifications
You must be signed in to change notification settings - Fork 48
配置说明
neoremind edited this page Aug 8, 2015
·
7 revisions
主要介绍rpc-server.properties和rpc-client.properties中公共部分的配置。
属性 | 可选值 | 作用 |
---|---|---|
ENABLE_ZK_REGISTRY | true:启动,默认。false:不启用 | 是否启用注册中心。对于服务端来说如果为true则在服务启动去zookeeper注册服务,否则不进行注册。对于客户端来说如果为true,则远程服务的地址从zookeeper上取,否则采用直连方式 |
ZK_SERVER_LIST | 例如,10.48.56.33:8701,10.48.52.17:8701 | zookeeper服务器地址列表,带端口号,按逗号分隔 |
ZK_DEFAULT_SESSION_TIMEOUT_MILLS | Int值,例如10000 | zookeeper seesion timeout,采用毫秒单位,当服务拿掉时,间隔该参数毫秒后会通知客户端 |
ZK_CONNECTION_TIMEOUT_MILLS | Int值,例如30000 | 启动zookeeper连接时的timeout,采用毫秒单位,超过这个时间则报错连接失败 |
主要介绍rpc-server.properties配置,省略1小节已经介绍的部分。
属性 | 可选值 | 作用 |
---|---|---|
ZK_REGISTRY_NAMESPACE | 例如,/my-service/main | 启用zookeeper注册后的服务注册的命名空间,即appnamespace。Znode path节点数量1-N均可,只需要在客户端定义的ZK_WATCH_NAMESPACE_PATHS指定正确即可。 |
SERVER_PORT | 例如,8080 | 服务器HTTP端口,由于需要在服务启动时就注册在,因此该变量需要提前设好,该端口是作为发布到zookeeper的port使用的。 |
主要介绍rpc-client.properties配置,省略1小节已经介绍的部分。
属性 | 可选值 | 作用 |
---|---|---|
ZK_WATCH_NAMESPACE_PATHS | 例如,/my-service/main, /my-service/exp | 客户端订阅zookeeper的path列表,按逗号分隔。当这里定义的path znode发生更新时,将会触发通知,更新客户端本地的服务地址cache。 |
SERVER_LIST | 例如,10.48.56.33:8080,10.48.52.17:8080 | zookeeper服务器地址列表,带端口号,按逗号分隔。 |
RPC_CONNECTION_TIMEOUT | Int值,例如900000 | 连接超时时间,采用毫秒单位。 |
RPC_READ_TIMEOUT | Int值,例如900000 | 读超时时间,采用毫秒单位。 |
RPC_RETRY_TIMES | Int值,例如2 | 重试次数,仅当错误处理方式为FAILOVER时才有意义,表示重试的次数。 |
一般来说,服务端需要依赖服务端暴露的sdk jar,以最小依赖原则进行模块对调用封闭,只暴露VO/BO/接口定义等。 具体来说在maven的pom中加入如下配置:
<build>
<defaultGoal>package</defaultGoal>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>make-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<finalName>${YOUR_SERVICE_NAME.dep.name}</finalName>
<includes>
<!-- 指定需要export到sdk jar的类,包括VO/BO/POJO,service接口和expcetion异常类等-->
<include>**/vo/*</include>
<include>**/bo/*</include>
<include>**/*Mgr.class</include>
<include>**/*Service.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<tarLongFileMode>gnu</tarLongFileMode>
</configuration>
<executions>
<execution>
<id>make-tar.gz</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>package-tar.gz.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
<!-- override maven-install-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>default-install</id>
<phase>none</phase>
</execution>
<execution>
<id>install YOUR_SERVICE_NAME</id>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<finalName>${YOUR_SERVICE_NAME.dep.name}</finalName>
<file>${project.build.directory}/${YOUR_SERVICE_NAME.dep.name}.jar</file>
<groupId>${project.groupId}</groupId>
<artifactId>${YOUR_SERVICE_NAME.dep.name}</artifactId>
<version>${project.version}</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
<!-- override maven-deploy-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<executions>
<execution>
<id>default-deploy</id>
<phase>none</phase>
</execution>
<execution>
<id>deploy YOUR_SERVICE_NAME</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<!--===============================================================================-->
<!-- WARN: Switch the config when dealing with maven's main repo and snapshot rep -->
<!--===============================================================================-->
<!--
<repositoryId>${baidu.deploy.repository.id}</repositoryId>
<url>${baidu.deploy.repository.url}</url>
<file>${project.build.directory}/${YOUR_SERVICE_NAME.dep.name}.jar</file>
-->
<repositoryId>Baidu_Local_Snapshots</repositoryId>
<url>http://maven.scm.baidu.com:8081/nexus/content/repositories/Baidu_Local_Snapshots</url>
<file>${project.build.directory}/${YOUR_SERVICE_NAME.dep.name}.jar</file>
<groupId>${project.groupId}</groupId>
<artifactId>${YOUR_SERVICE_NAME.dep.name}</artifactId>
<version>${project.version}</version>
<packaging>jar</packaging>
<retryFailedDeploymentCount>3</retryFailedDeploymentCount>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意:
- ${YOUR_SERVICE_NAME.dep.name}需要替换为服务的名称,例如xxx-service-sdk。因此在target或者maven仓库中会出现xxx-service-sdk.jar以及xxx-service.war(或者tar.gz)两个模块。
- 在开发编译SNAPSHOT版本时,请注意deploy配置中的“”部分进行main仓库和snapshot仓库的切换,一旦编译上传main仓库便无法覆盖,snapshot仓库可以随意覆盖。 暴露的VO/BO如果还依赖了一些第三方jar,那么这些依赖的jar也是需要加入到客户端的,否则会再运行时报错Class Not Found。
主要介绍在applicationContext.xml或者注解方式配置代理bean的参数NaviProtocol的定义。
一个完整的例子,
@Bean
public CompanyMgr companyMgr() throws Exception {
return (CompanyMgr) (new NaviProxyFactoryBean("/navi-demo-server/main/", CompanyMgr.class, NaviProtocol.PROTOSTUFF, NaviFailStrategy.FAILOVER, NaviSelectorStrategy.RANDOM).getObject());
}
可选值 | 作用 |
---|---|
PROTOSTUFF | 默认,采用Protostuff序列化协议 |
PROTOBUF | 采用Protobuf序列化协议 |
主要介绍在applicationContext.xml或者注解方式配置代理bean的参数NaviFailStrategy的定义。
一个完整的例子,
@Bean
public CompanyMgr companyMgr() throws Exception {
return (CompanyMgr) (new NaviProxyFactoryBean("/navi-demo-server/main/", CompanyMgr.class, NaviProtocol.PROTOSTUFF, NaviFailStrategy.FAILOVER, NaviSelectorStrategy.RANDOM).getObject());
}
可选值 | 作用 |
---|---|
FAILOVER | 默认,失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用)。重试会带来更长延迟,可通过RPC_RETRY_TIMES =2来设置重试次数(不含第一次)。 |
FAILFAST | 快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作 |
主要介绍在applicationContext.xml或者注解方式配置代理bean的参数NaviSelectorStrategy的定义。
一个完整的例子,
@Bean
public CompanyMgr companyMgr() throws Exception {
return (CompanyMgr) (new NaviProxyFactoryBean("/navi-demo-server/main/", CompanyMgr.class, NaviProtocol.PROTOSTUFF, NaviFailStrategy.FAILOVER, NaviSelectorStrategy.RANDOM).getObject());
}
可选值 | 作用 |
---|---|
RANDOM | 默认,随机,按随机概率(推荐使用) |
ROUNDROBIN | 轮循,存在慢的机器累积请求问题,极端情况可能产生雪崩,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。 |