Export to GitHub

excavator - QuickStart.wiki


快速开始

Excavator提供了Spring的钩子,让你能在Spring中方便的进行配置。当然了一个ZK环境你还是必须的,既然是个快速开始,哪我们就将ZK、Consumer、Provider都部署在一台机器上好了。 这里先放出DEMO的maven工程源代码,大家下载下来后可以导入自己喜欢的IDE中去运行。

DEMO下载

  • 搭建一台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);
    }

}

} ```