OCTO-RPC集成 Thrift 0.11.0
摘要:OCTO是美团的服务治理框架,2019年开源,主要包括 octo-rpc, octo-portal, octo-mns 三大模块。octo-rpc原生集成了Thrift 0.9.3,本文主要介绍如何集成Thrift 0.11.0版本到octo-prc。
一、环境
Mac, homebrew, git, jdk8, maven3
二、目标
使用zookeeper作为服务的注册中心,不使用octo-mns,不使用cat作为trace
三、Thrift 0.11.0版本安装
目前Thrift最新版本是0.12.0,homebrew里的默认安装版本是0.12.0,未提供0.11.0的版本, 安装Thrift 0.11.0的步骤如下:
- 复制formula文件thrift.rb到本地
class Thrift < Formula
desc "Framework for scalable cross-language services development"
homepage "https://thrift.apache.org/"
url "https://www.apache.org/dyn/closer.cgi?path=/thrift/0.11.0/thrift-0.11.0.tar.gz"
sha256 "c4ad38b6cb4a3498310d405a91fef37b9a8e79a50cd0968148ee2524d2fa60c2"
bottle do
cellar :any
rebuild 1
sha256 "5b99e08e1a69b6b9e39769982efec86fd773753d39439ca89011e180bcdb9249" => :mojave
sha256 "3a0d80b8f12a25fc87a4fe58722357c932c320a5d9a79f27346d21bcb956a337" => :high_sierra
sha256 "85bc8f2f5634985803ae738a548710cb6f0ca71acb0a35b7b2f29631b894820d" => :sierra
end
head do
url "https://github.com/apache/thrift.git"
depends_on "autoconf" => :build
depends_on "automake" => :build
depends_on "libtool" => :build
depends_on "pkg-config" => :build
end
depends_on "bison" => :build
depends_on "boost"
depends_on "openssl"
def install
system "./bootstrap.sh" unless build.stable?
args = %W[
--disable-debug
--disable-tests
--prefix=#{prefix}
--libdir=#{lib}
--with-openssl=#{Formula["openssl"].opt_prefix}
--without-erlang
--without-haskell
--without-perl
--without-php
--without-php_extension
--without-ruby
--without-java
--without-python
]
ENV.cxx11 if ENV.compiler == :clang
# Don't install extensions to /usr:
ENV["PY_PREFIX"] = prefix
ENV["PHP_PREFIX"] = prefix
ENV["JAVA_PREFIX"] = buildpath
system "./configure", *args
ENV.deparallelize
system "make"
system "make", "install"
end
test do
system "#{bin}/thrift", "--version"
end
end
复制代码
-
如果已经安装其他版本,先卸载,brew uninstall thrift
brew install ./thrift.rb
-
查看安装是否成功
thrift --version
四、octo-rpc集成Thrift 0.11.0
-
代码下载
git clone github.com/Meituan-Dia…
-
升级Thrift 版本到0.11.0, 更新 dorado/pom.xml
<libthrift.version>0.11.0</libthrift.version>
-
注解mns-invoker依赖
<!-- <dependency> <groupId>com.meituan.octo</groupId> <artifactId>mns-invoker</artifactId> <exclusions> <exclusion> <artifactId>libthrift</artifactId> <groupId>org.apache.thrift</groupId> </exclusion> </exclusions> </dependency> --> 复制代码
-
使用thrift 0.11.0生成代码, gen_thrift.sh脚本文件放置在 octo-rpc/dorado 目录下,执行命令 chmod +x gen_thrift.sh & ./gen_thrift.sh
#!/bin/bash #dorado/dorado-test/dorado-test-api files=$(ls dorado-test/dorado-test-api/src/main/resources/thrift/) for filename in $files do echo $filename thrift --gen java dorado-test/dorado-test-api/src/main/resources/thrift/$filename done cp -rf gen-java/* dorado-test/dorado-test-api/src/main/java/ rm -rf gen-java # dorado-protocol-octo files=$(ls dorado-protocol/dorado-protocol-octo/src/main/resources/idl/) for filename in $files do echo $filename thrift --gen java dorado-protocol/dorado-protocol-octo/src/main/resources/idl/$filename done cp -rf gen-java/* dorado-protocol/dorado-protocol-octo/src/main/java/ rm -rf gen-java 复制代码
-
更新类com.meituan.dorado.serialize.thrift.ThriftIDLSerializer.java, 不兼容导致
TApplicationException.read(protocol) -> TApplicationException.readFrom(protocol) 复制代码
-
模块编译
mvn clean install -Dmaven.test.skip=true -pl -dorado-registry/dorado-registry-mns,-dorado-trace/dorado-trace-cat
-
整体打成一个jar包
cd dorado-build && mvn clean install -Dmaven.test.skip=true