Erlang中使用Thrift

現在每一個領域都有相對成熟解決方案,不須要重複性的開發。可是也帶來了一些問題,單一語言開發已經變的愈來愈困難。 git

咱們使用Ruby on Rails來作API的開發,可是不少業務並不適合Ruby on Rails 來作,例如說咱們近期須要實現一個發送短信的功能。咱們最開始再業務邏輯中直接調用短信服務商的服務,可是效果很很差,若是出現問題很難發現問題出在何處,因此將短信發送功能單獨的提出來作一個內部的短信網關。 github

獨立後的短信網關將給咱們帶來如下好處: web

1.發送的速度會加快,由內部短信網關統一處理網絡異常,提升發送成功率 編程

2.同時也能快速的更換短信服務商或接入多個短信運營商 網絡

3.集中管理,便於發現問題 框架

短信網關固然選擇使用適合作通訊而且編程簡單的Erlang。這帶來一個問題,咱們應當如何對接Ruby on Rails的API和Erlang實現的短信網關。最初想使用webmachine作Restful API,可是很不幸webmachine只能幫綁定一個端口,不能作到內外服務分離。而後觀察如今成熟方式,Thrift和Protocol Buffer,通過比較Thrift比較符合咱們的狀況(生成Erlang和Ruby的端代碼,Protocol暫時只能靠第三方支持)。 函數

在Erlang使用Thrift須要注意一些事情(測試後發現的,不必定對) 測試

1.在rebar.config中添加https://github.com/lpgauth/thrift-erlang這個git 庫,這個Thrift在Erlang中的框架代碼,沒這東西生成的代碼根本就沒用。 進程

2.在Erlang中實現的服務函數,最好是對內部邏輯的封裝,除非這個函數很簡單。 開發

3.在Erlang中的handler模塊不要自身就是個進程,而只是一堆函數。若是須要進程的操做,請用函數封裝。

好了說下步驟。

第一步:編寫相應的*.thrift  文件

第二步:thrift --gen erl *.thrift,將生成的gen-erl複製到src中

第三步:按照例子代碼寫一個模塊,將*.thrift中的函數全都實現了,並在裏面指定服務的端口號和啓動thrift的框架

第四步:將上一步寫的模塊添加到整個程序啓動過程的最末處,啓動thrift開始對外提供服務。

好了,祝你們玩的開心。

相關文章
相關標籤/搜索