现在每一个领域都有相对成熟解决方案,不须要重复性的开发。可是也带来了一些问题,单一语言开发已经变的愈来愈困难。 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开始对外提供服务。
好了,祝你们玩的开心。