快速开始
Excavator提供了Spring的钩子,让你能在Spring中方便的进行配置。当然了一个ZK环境你还是必须的,既然是个快速开始,哪我们就将ZK、Consumer、Provider都部署在一台机器上好了。 这里先放出DEMO的maven工程源代码,大家下载下来后可以导入自己喜欢的IDE中去运行。
搭建一台ZK服务器
zk的具体用法就不是这里主要阐述的内容了,链接到淘宝工程师君山在IBM DeveloperWorks写的教程
创建Maven工程
mvn archetype:create -DgroupId=com.googlecode.excavator -DartifactId=excavator-demo
Excavator天生为大家喜闻乐见的Spring提供了钩子,方便大家进行配置。 * 编辑pom.xml,新增spring、excavator、log4j个依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>com.googlecode.excavator</groupId> <artifactId>excavator</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
- 配置excavator.properties
excavator框架约定了固定的配置文件名作为启动时读取的配置文件,该文件必须存储在根路径下 ```
公共必填
当前应用名
excavator.appname=demo
ZK服务器地址
excavator.zookeeper.servers=127.0.0.1:2181
ZK会话超时时间
excavator.zookeeper.sessionTimeout=60000
ZK连接超时时间
excavator.zookeeper.connectTimeout=500
服务端必填
服务端服务端口
excavator.provider.port=3659
服务端工作线程(服务端必填)
excavator.provider.workers=250
消费端必填
客户端连接超时时间
excavator.consumer.connectTimeout=500
* spring配置
<!-- 服务端:sayService服务目标 -->
<bean id="sayHelloServiceTarget"
class="com.googlecode.excavator.demo.service.impl.SayHelloServiceImpl" />
<!-- 服务端:发布远程服务 -->
<bean id="sayHelloServiceExport"
class="com.googlecode.excavator.spring.ExcavatorProviderSpringFactoryBean">
<property name="targetInterface"
value="com.googlecode.excavator.demo.service.SayHelloService" />
<property name="targetObject" ref="sayHelloServiceTarget" />
<property name="group" value="G1" />
<property name="version" value="1.0.0" />
<property name="defaultTimeout" value="60000" />
</bean>
<!-- 消费端:远程sayService服务-G1组 -->
<bean id="sayHelloService"
class="com.googlecode.excavator.spring.ExcavatorConsumerSpringFactoryBean">
<property name="targetInterface"
value="com.googlecode.excavator.demo.service.SayHelloService" />
<property name="group" value="G1" />
<property name="version" value="1.0.0" />
<property name="defaultTimeout" value="60000" />
</bean>
* Java代码
* 服务接口声明
/**
* SayHello服务
* @author vlinux
*
*/
public interface SayHelloService {
/**
* 向某人问好
* @param name
* @return "hello:"+name
*/
String sayTo(String name);
}
* 服务接口实现
/**
* SayHello服务的实现
* @author vlinux
*
*/
public class SayHelloServiceImpl implements SayHelloService {
public String sayTo(String name) {
return "hello:"+name;
}
}
* 测试代码
/**
* 挖掘机例子
* @author vlinux
*
*/
public class Demo {
public static void main(String... args) throws InterruptedException {
try {
// 初始化Spring
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext("classpath:/spring.xml");
ctx.registerShutdownHook();
// 这里需要将服务的export导出,目的是为了能触发Spring主动加载provider服务
ctx.getBean("sayHelloServiceExport");
// 加载客户端
SayHelloService sayHelloService = (SayHelloService) ctx.getBean("sayHelloService");
//这里暂停5秒等待zk完成服务推送过程
Thread.sleep(5000);
// 远程调用服务
System.out.println( sayHelloService.sayTo("dukun") );
}finally {
// 作为一个良好市民,记得容器关闭的时候释放资源哦
System.exit(0);
}
}
} ```