调用Java开发步骤详解

作者: 网络编程  发布:2019-10-19

 

Thrift实现C#调用Java开荒步骤详解

        事情是那般的,在三个新品类中引进了fastdfs,用那东西做一些小数码的存款和储蓄依旧很有益的,然后在nuget上就找到了三个法斯特DFS的sdk,如下图:

Apache Thrift 是 脸书 落成的一种高效的、扶持三种编制程序语言的远程服务调用的框架。

好像的跨语言RPC框架还大概有ICE、Hessian、Protocol Buffer、Avro等。

 

金沙澳门官网 1

1 下载Thrift

下载地址:

thrift-0.9.3.exe 用于编写翻译Thrift中间文件生成对应语言代码的工具

thrift-0.9.3.tar.gz 包括Thrift各样语言的源码库,以致一些测验程序代码等

 

2 编写翻译生成.NET库(DLL)和Java库(Jar)

解压thrift-0.9.3.tar.gz文件。

(1) 生成.NET库

开荒工程:E:Thriftthrift-0.9.3libcsharpsrcThrift.sln 编写翻译,就可以生成Thrift.dll

本身的情况是VS二零零六以致.NET 4.0 

(2) 生成Java库

Java库是经过Ant创设的,须求安装Ant,安装步骤这里就不赘述了。

开荒命令行CD到java库代码所在的路径:E:Thriftthrift-0.9.3libjava(包含build.xml)

接下来间接推行ant命令就能够开掘build目录下转移对应的jar文件。

       一眼就看到了那么些top1的sdk,应该会相比较可信。。。轻巧的在品种中采纳了一下没啥难题就摇摇荡晃上线了,然后就正剧了,测量检验那边反馈说上传了三个

3 编写thrift中间文件

namespace java test
namespace csharp test
service Hello {   
   string helloString(1:string word)
}

人群,拉下来的时候少了几人,笔者的选拔情势是将一堆customerid遵照bitmap的格局存到byte[]数组传到fastdfs,最后硬着头皮追踪下来开掘是其一所谓

4 生成Java和C#各自的接口文件

Thrift-0.9.3.exe –gen java test.thrift

Thrift-0.9.3.exe –gen csharp test.thrift

能够看出在当前目录下会并发转移的应和代码。

的sdk在upload的时候在bytes数组管理上出了bug,这下万般无奈了,哎,nuget上那写sdk的估值约等于私有写着游戏丢上去的,哪儿敢用到生育上,好在在测

5 编写Java服务端代码

新建普通Java项目,将事先ant编写翻译生成的连带的jar文件(libthrift-0.9.3.jar以致E:Thriftthrift-0.9.3libjavabuildlib目录下全体jar文件)add tobuild path;然后还要将转移的Hello.java也步入到工程中,注意包名。

(1)首先编写接口完成类:

 

package test;
import org.apache.thrift.TException;
import test.Hello.Iface; 
public classHelloImpl implementsIface{ 
   privatestaticintcount= 0;      
   @Override 
   publicString helloString(String word)throwsTException
   {
        count  = 1; 
        System.out.println("get "   word   " "  count);  
        return "hello "   word   " "   count; 
   }  
}

 

(2)编写寄宿代码,运营并监听在内定端口:

package test;
import org.apache.thrift.protocol.TBinaryProtocol;   
import org.apache.thrift.protocol.TBinaryProtocol.Factory;   
import org.apache.thrift.server.TServer;   
import org.apache.thrift.server.TThreadPoolServer;   
import org.apache.thrift.server.TThreadPoolServer.Args;   
import org.apache.thrift.transport.TServerSocket;   
import org.apache.thrift.transport.TTransportException; 
import test.Hello.Processor;

public classServer { 
   @SuppressWarnings({"rawtypes", "unchecked" })
    public void startServer() {   
        try {   
            System.out.println("thrift server host on port 8899"); 
            TServerSocket serverTransport = new TServerSocket(8899);
           Hello.Processorprocess = newProcessor(newHelloImpl());   
            Factory portFactory = newTBinaryProtocol.Factory(true, true);   
            Args args = newArgs(serverTransport);   
            args.processor(process);   
            args.protocolFactory(portFactory);   
            TServer server = newTThreadPoolServer(args);   
            server.serve();   
        } catch (TTransportException e) {   
            e.printStackTrace();   
        }   
   }   

   publicstaticvoidmain(String[] args) {    
        System.out.println("thrift server init"); 
        Server server = new Server();   
        System.out.println("thrift server start"); 
        server.startServer();   
        System.out.println("thrift server end"); 
   }   
} 

 

试意况意识了,否则又搜查缴获什么乱子了。

6 编写C#客商端代码

新建普通调控台项目,引进Thrift.dll;然后还要将转移的Hello.cs也投入到工程中。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Thrift.Transport;
using Thrift.Protocol;
namespace ThriftTest
{
    class ClientTest
    {
        static void Main(string[]args)
        {
            TTransporttransport = new TSocket("localhost", 8899);
            TProtocolprotocol = new TBinaryProtocol(transport);
            test.Hello.Client client = newtest.Hello.Client(protocol);
            transport.Open();
            Console.WriteLine("Client calls client.helloString().....");
            Console.WriteLine(client.helloString("jiyiqin"));
            client.Dispose();
        }
    }
}

 

7 运行

运行java服务端Server.java:

thrift server init

thrift server start

thrift server host on port 8899

get jiyiqin 1

 

运行C#顾客端代码ClientTest.cs

Client calls client.helloString().....

Hello jiyiqin 1

请按任意键继续…

能够见到Thrift和ICE等跨语言RPC框架开垦步骤特别相似,差不离千篇一律,生成的公文也都大概,但是和依靠Servlet的Hessian这种跨语言RPC框架差距异常的大。

 

Apache Thrift 是 推特(TWTR.US) 完结的一种高效的、补助七种编制程序语言的中远间隔服务调用的框架。 类似的跨语言RPC框架...

一:消除办法

  难题还得要化解,不过庆幸的是,fastdfs是Ali的贰个大牌YuQing写的,那应该有java的sdk更可相信一点,用maven的话更便利。

        <dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27.0.0</version>
        </dependency>

 

         pull下来之后,这几个sdk果然是fastdfs的撰稿人写的,这下子安全感暴增,测量检验了一晃,那多少个bug用那些sdk果然就不曾难点了。。。快乐~~~~

金沙澳门官网 2

  

金沙澳门官网 ,       然后流程图大概就产生了那些样子。

金沙澳门官网 3

 

二:解决C# 和 JAVA的互通难点

  互通方式比相当多,除了走rest这种面向http的方法,还是能使用thrift,grpc这种tcp的情势,最终笔者主宰依然利用thrift走一遭,近年来风行的版本是0.11了。

网址: 看了一下C#的thrift sdk,貌似最高协理0.9.1,网站为: ,

 

金沙澳门官网 4

金沙澳门官网 5

 

有了这几个thrift-0.9.1.exe之后,接下去就足以定义Thrift的DSL,那些DSL能够让thrift-0.9.1.exe 生成梯次语言版本的sdk。

 

  1. 定义Thrift DSL

    service ThriftService {

     string Upload(1: binary data),
     binary Download(1: string path),
     bool Remove(1: string path)
    

    }

 

 有人只怕会问,那几个DSL怎么写,那一个我们能够看看官方的DSL的次第首要词描述的网站:  依然相比较轻松的,借使不明白的

话,那些是身先士卒大全:  ,然后保留为1.thrift。

 

  1. 通过thrift生成 C# SDK

 

     生成的措施能够参照一下官方网站的模版:

thrift --gen <language> <Thrift filename>

C:Usershxc>cd C:javalibthrift

C:javalibthrift>thrift-0.9.1.exe -gen csharp C:javalibthrift1.thrift

金沙澳门官网 6

本文由金沙澳门官网发布于网络编程,转载请注明出处:调用Java开发步骤详解

关键词: 金沙澳门官网

上一篇:处理集锦,代码部署数据库及IIS站点
下一篇:没有了