thrift实现C#调用Java服务
最近用户流失分析模型,需要从日志里面提取一些数据,但是日志存储系统是部署到北京的(注以前的日志系统数据是存储在mysql的),大数据集群又是在成都的,这一下坑了,不得不考虑把数据同步到成都,但是受限于带宽问题,数据必须压缩一下,刚开始想的是用Kafak进行压缩然后传输,后来想了想觉得麻烦,还是写个外挂从数据库取数据,然后通过调用部署到成都的java服务入kafka,但是外挂用的c#写的,就需要使用thrift了。
首先Java服务端需要使用thrift生成接口,我们需要准备截图中的两样东西,如图1,一个是thrift工具(http://thrift.apache.org/),一个是你自己需要定义的接口,直接用文本编辑即可,然后后缀改为以thrift结束,接口内容如图2,然后输入cmd,进入放置thrift的目录。
图1

图2
后面步骤如下:
1.输入截图中命令,生成java文件

2.拷贝java代码到自己的java服务

3.生成C#端代码,把接口文件调整一下,再命令空间加上csharp,然后输入截图中命令,生成csharp文件

4.然后把该文件拷贝到自己的C#项目即可使用
5.网上找了一个简单的客户端调用服务端的例子,验证可用,公司是封装了路由的,这里就不再体现
public const string SERVERIP = "localhost";
public static int SERVERPORT = 8090;
public static int TIMEOUT = 3000;
public void startClient(String username)
{
TTransport transport = null;
try
{
transport = new TSocket(SERVERIP, SERVERPORT, TIMEOUT);
//协议要和服务端一致
TProtocol protocol = new TCompactProtocol(transport);
HelloWorldService.Client client = new HelloWorldService.Client(protocol);
transport.Open();
String result = client.sayHello(username);
Console.WriteLine("Thrift client result =: " + result);
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
finally
{
if (null != transport)
{
//close
transport.Close();
}
}
}

浙公网安备 33010602011771号