RPC(一):thrift 框架 go語言開發

1、寫 thrift 文件定義好 service :方法、入參出參
2、生成 代碼併發包
3、編寫 server 端實現
4、本地啓動server端,進行測試
5、打包啓動 rpc 服務

具體實現:
1、寫 thrift 文件定義好 service 以及 入參出參的 struct
namespace 定義生成的文件目錄和名稱。

namespace py test_thrift.action_card
namespace go test_thrift.action_card
namespace java test_thrift.action_card

enum ResouceCode {
    ALPHA = 1,
    BETA = 2
}

序號:類型 名稱
struct BannerParams {
    1: i64 member_id;
    2: i32 num;
}

service MemberService {
    Banner get_banner(1: BannerParams params)
}

生成 py 或者 go 代碼,併發布鏡像
gen:
thrift -r --gen go:package_prefix=github.com/serenity/gen-go/ ./thrift_files/test/test.thrift

2、編寫 server 端實現

package service

import (
   "github.com/serenity/gen-go/test_thrift/member"
   "github.com/serenity/golang/pkg/action_card/controller"
   "github.com/serenity/golang/pkg/common/model"
)

func GetMemberServiceProcessor(msgChan chan model.Message) *member.MemberServiceProcessor {
   // service - api
   memberService := controller.NewMemberService()

   // processor
   return member.NewMemberServiceProcessor(memberService)
}

3、客戶端調用測試

var memberClient = member_service.NewMemberServiceClient(tc.New("MemberService", tc.Timeout(500*time.Millisecond), tc.TargetName("member")))
params := memberClient.BannerParams{0,0}
banner := memberClient.GetBanner(params)
fmt.Println(banner)

4、打包啓動 rpc 服務

servicesMap := map[string]thrift.TProcessor{
   "MemberService":        memberService.GetMemberServiceProcessor(),
}
server.New(
   servicesMap,
   server.SentryDSN(conf.EnvConfig.SentryDSN),
   server.Tracing(conf.EnvConfig.ChoosedClusterAddrs),
   server.Slowlog(500*time.Millisecond),
).Run("0.0.0.0:10000")

5、git 上線

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章