go thrift oprot.Flush() not enough arguments in

來源:互聯網
上載者:User

代碼在GitHub上託管

https://github.com/xej520/xingej-thrift/tree/master/hw-thrift

環境說明

  • windows 10
  • Intellij IDEA
  • thrift-0.11.0.exe
  • 服務端用java實現
  • 用戶端用go實現
  • 用例的作用是,用戶端將字串傳遞給伺服器,伺服器將字串轉換成大寫後,返回給用戶端
     
     
     

    建立maven工程(父模組)

    刪除內建的src目錄(目前沒用,刪掉)


     
     

    準備IDL檔案

  • 建立目錄thrift
  • 建立IDL檔案hw.thrift

    namespace java com.test.thriftnamespace  go pkg.servicestruct Data {    1: string text;}service format_data {    Data doFormat(1:Data data);}


     
     

    建立maven模組,用於儲存產生的java版本的程式碼程式庫


     
     

  • 利用thrift來產生java版本的程式碼程式庫
    thrift --gen java -out ../java-thrift-idl/src/main/java hw.thrift
  • 產生的程式碼報錯,是由於缺少libthrift庫引起的,因此在pom.xml檔案中,添加必要的依賴

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent>    <artifactId>hw-thrift</artifactId>    <groupId>com.test.thrift</groupId>    <version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>java-thrift-idl</artifactId><dependencies>    <dependency>        <groupId>org.apache.thrift</groupId>        <artifactId>libthrift</artifactId>        <version>0.11.0</version>    </dependency></dependencies><build>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <version>3.7.0</version>            <configuration>                <source>1.8</source>                <target>1.8</target>            </configuration>        </plugin>    </plugins></build>

</project>

- 添加完依賴@Override 註解報錯的話,可能是由於thrift的版本不一致引起的。## 建立go模組,用於儲存產生go版本的程式碼程式庫  - 利用thrift來產生go版本的程式碼程式庫      thrift --gen go  -out ../go-thrift-idl hw.thrift![](https://note.youdao.com/yws/public/resource/9c8584c6ec980aee585665c38a65bf9d/xmlnote/42EAB0BE237340D6A8989EEF383753DE/20079)- 注意產生的程式碼是有問題的[原因具體不詳]    - 在hw.go檔案中 oprot.Flush()拋異常,not enough arguments in call to oprot.Flush less... (Ctrl+F1)    - 解決措施:原因是缺少context.Context類型的參數,剛好方法中已經有,直接添加上就可以了,改成oprot.Flush(ctx)  - 將產生的程式碼庫pkg 拷貝到gopath的src路徑下,這樣用戶端就可以使用程式碼程式庫了,不然有可能找不到產生的程式碼庫## 建立maven模組,用於建立服務端  - 建立maven模組,java-thrift-server - 更新pom.xml檔案,添加對java-thrift-idl的依賴 - 編寫FormatDataImpl實現hw.thrift定義的介面- 編寫sever, 實現thrift編程## 建立go模組,用於go版本的用戶端  - 建立go模組,go-thrift-client  - 編寫商務邏輯## 測試  - 啟動伺服器端 - 啟動用戶端             > 將服務端更改spring-boot 版本  > 也就是更新java-thrift-server 模組  - 更新java-thrift-server模組的pom檔案,為下面的形式  

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">;

org.springframework.boot spring-boot-starter-parent 1.5.3.RELEASE 4.0.0 java-thrift-server org.springframework.boot spring-boot-starter com.test.thrift java-thrift-idl 1.0-SNAPSHOT ``` - 添加appliaction.properties設定檔 > server.name=java-thrift-service server.port=8082 - 更新FormatDataImpl檔案,添加@Service註解,也就是交給spring 管理起來 - 建立thirift_socket包,建立ThriftServer檔案,編寫Thrift邏輯 - 可能會報錯,如果是could not autowire. no bean of Iface的話,可以不用管 - 更新server檔案,添加上@SpringBootApplication 註解,表明是啟動類 - 測試 > 啟動服務端 啟動用戶端
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.