上篇文章是1年前写的惭愧惭愧,今天一个同事问我要demo然后看了下文章 好吧主要的代码 没写出来,今天补充下
上篇地址:http://www.cnblogs.com/rufus-hua/p/4159278.html
上篇写到 在 thrift文件夹里 新建 hello.thrift文件
如下面代码:
namespace java com.test.finagle.demo
service Hello{string helloString(1:stringpara)
i32 helloInt(1:i32 para)bool helloBoolean(1:boolpara)
void helloVoid()stringhelloNull()
}
然后 点击编译 ,(如果不报错的)会看到在 target文件夹里生成 target\generated-sources\thrift\scrooge\com\test\finagle\demo 下面生成的hello.java文件 很好.
然后新建java文件 继承生成文件里的ServerIface接口
如代码:
public class HelloImpl implementsHello.ServiceIface {public FuturehelloString(String para) {returnFuture.value(para);
}public Future helloInt(intpara) {returnFuture.value(para);
}public Future helloBoolean(booleanpara) {returnFuture.value(para);
}public FuturehelloVoid() {return Future.value(null);
}public FuturehelloNull() {return Future.value(null);
}
}
ok 最后一步main 方法:
public classApp {staticListeningServer server;public static voidmain(String[] args) {
Integer port= 9801;//这是 finagle 真正的监听地址
String zkHosts="127.0.0.1:9000";//这是zk服务器的地址 我这里只有一台 如果多台;分割
String zkPath="/soa/test/finagle";try{
System.out.println("zkHosts:" + zkHosts + "\tzkPath:" + zkPath+"\tport:"+port);
Hello.ServiceIface iface=newHelloImpl();
server= Thrift.serveIface(newInetSocketAddress(port), iface);
String zkFullPath= String.format("zk!%s!%s!0", zkHosts, zkPath);
server.announce(zkFullPath);
System.out.println("finagle server start");
Runtime.getRuntime().addShutdownHook(newThread() {
@Overridepublic voidrun() {
App.close();
}
});
Await.ready(server);
}catch(Exception e) {
e.printStackTrace();
System.exit(-1);
}
}public static voidclose() {
System.out.println("finagle server shutdown");
server.close();
}
}
下面上 client 端代码:(注:客户端是不用关心服务端真正的ip只需要确保zk能用就行 有个概念叫服务发现)
String zkHosts="127.0.0.1:9000";
String zkPath="/soa/test/finagle";
String zkFullPath= String.format("zk!%s!%s", zkHosts, zkPath);
ServiceFactory factory =Thrift.newClient(zkFullPath);
Hello.ServiceIface helloClient= new Hello.ServiceToClient(factory.toService(), newTBinaryProtocol.Factory());
String ret= helloClient.helloString("test").get();
Assert.assertEquals("test", ret);
最后附上 demo下载地址 http://pan.baidu.com/s/1kTKsYDT
ps: 最后 记得修改 maven的setting文件 的镜像
ss
false
socks5
127.0.0.1
1080
nexus
nexus
http://maven.oschina.net/content/groups/public
*