nameko中的http~nameko系列之三

使用flask建立對(duì)外的web訪問,當(dāng)然是一種非常容易的事情:在flask這個(gè)輕量級(jí)框架下,非常容易建立自己的web服務(wù),在web服務(wù)的具體路由對(duì)應(yīng)的方法中通過nameko.standalone.rpc包中的ClusterRpcProxy,即可實(shí)現(xiàn)調(diào)用其他微服務(wù)(參見系列三中的案例)

然后運(yùn)行的時(shí)候,按照flask的運(yùn)行方式,即可。

但是有時(shí)候,還是希望純粹些,就使用nameko自己的管理方式,該怎么辦。
nameko提供了http的插件,實(shí)例代碼如下:
my_web_server.py
import json
from nameko.web.handlers import http

class HttpService:
name = "http_service"

@http('GET', '/get/<int:value>')
def get_method(self, request, value):
    return json.dumps({'value': value})

@http('POST', '/post')
def do_post(self, request):
    return u"received: {}".format(request.get_data(as_text=True))

@http('GET,PUT,POST,DELETE', '/multi')
def do_multi(self, request):
    return request.method

說明:
1、 nameko.web.handlers中定義了http這個(gè)裝飾器,使用類似@http('POST', '/post') 的寫法,就可以讓被裝飾的方法,處理http的request。
2、整個(gè)定義服務(wù)的方式與rpc的相同,在服務(wù)類中,需要當(dāng)以一個(gè)名稱。
3、運(yùn)行的時(shí)候,與rpc的微服務(wù)相同 nameko run my_web_server


image.png

基于整個(gè)思路,要開發(fā)一個(gè)api網(wǎng)關(guān),只需要開發(fā)這一個(gè)http請(qǐng)求響應(yīng)的微服務(wù)即可。具體的功能在微服務(wù)中實(shí)現(xiàn)。
4、缺省的運(yùn)行端口是8000。這里有個(gè)問題,可以重復(fù)運(yùn)行整個(gè)server,并不會(huì)報(bào)端口占用的錯(cuò)誤
5、如果希望使用不同的端口運(yùn)行,可以使用config
定義一個(gè)config.yaml文件,內(nèi)容如下
WEB_SERVER_ADDRESS: 0.0.0.0:8001
運(yùn)行的時(shí)候:nameko run my_web_server --config config.yaml
6、方法中調(diào)用微服務(wù),使用nameko.standalone.rpc包中的ClusterRpcProxy

比如增加一個(gè)路由:
from nameko.standalone.rpc import ClusterRpcProxy
CONFIG = {'AMQP_URI': "amqp://guest:guest@localhost"}

@http('GET', '/hello')
def hello():
with ClusterRpcProxy(CONFIG) as rpc:
result = rpc.greeting_service.hello(name="jerry")
return result, 200

nameko文檔中有如下一段話:
Nameko is not a web framework. It has built-in HTTP support but it’s limited to what is useful in the realm of microservices. If you want to build a webapp for consumption by humans you should use something like flask.
建議使用flask類似的web框架。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容