Python微服務框架nameko的簡單使用


在後端開發方面,Java的使用呢要遠比Python廣泛,所以Java的微服務框架非常流行,但Python的微服務框架卻很少有人問津。在大多數需要微服務的場合下直接用Java的各種工具就可以解決問題,但如果業務代碼使用Python寫的,那麼使用Java工具就不太方便了。
其實Python也有自己的微服務框架,其中用的最多的就是nameko,nameko框架輕便,使用簡單,易上手,是一個很不錯的微服務框架

一.微服務框架原理

微服務架構的實現方式

微服務架構最重要的就是使用什麼方式進行服務間通信(也稱作服務調用),按照通信方式的不同,主要可以分爲同步通信和異步通信兩種方式:

同步通信

同步調用比較簡單,一致性強,但是容易出調用問題,性能體驗上也會差些。同步通信最常用的兩種協議是RESTful和RPC,而目前使用最廣泛,最有名的兩種微服務框架Spring Cloud和Dubbo分別使用了RESTful和RPC協議。RESTful和RPC兩種協議各有優勢,具體使用要看業務場景。

Dubbo框架是一個非常流行的採用同步通信的分佈式微服務框架,下圖就是Dubbo框架的工作原理圖:

在這裏插入圖片描述

首先一個微服務應用程序需要有服務的生產者和服務的消費者,另外還需要一個註冊中心(常見的有zookeeper和rabbitmq等)來管理和調度服務。微服務架構的程序運行的一般步驟爲:

  1. 服務提供方,即生產者啓動服務,並將服務提交到註冊中心註冊服務
  2. 服務需求方,即消費者連接到註冊中心,向註冊中心發出請求,申請需要的服務
  3. 註冊中心根據消費者發出的請求來調度服務,將對應的服務提供者(生產者)的信息發送給消費者
  4. 消費者和生產者之間建立連接,消費者調用服務
  5. 記錄服務調用過程中的信息

異步通信

異步通信一般通過消息中間件來進行服務間通信,消息中間件能爲調用之間提供的緩衝,確保消息積壓不會沖垮被調用方,同時能保證調用方的服務體驗,繼續幹自己該乾的活,不至於被後臺性能拖慢。不過需要付出的代價是一致性的減弱。

nameko框架就是一個採用異步通信方式的微服務框架,採用RabbitMQ消息隊列作爲消息中間件,原理非常簡單,使用起來也很方便。

在這裏插入圖片描述

二.入門案例–使用nameko框架實現微服務程序

2.1 安裝註冊中心

nameko採用RabbitMQ作爲註冊中心,所以使用nameko必須要先安裝RabbitMQ

以docker容器的方式運行RabbitMQ是最爲簡便快捷的方式,兩行命令就搞定了,這裏介紹如何使用docker運行RabbitMQ。

第一步:從DockerHub拉取rabbitmq鏡像

docker pull rabbitmq:management

第二部:運行RabbitMQ容器

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

如果需要設置用戶名和密碼,則使用這條命令

docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management

我運行容器時沒有設置用戶名和密碼,所以使用用戶名guest,密碼guest登錄。http://localhost:15672/

在這裏插入圖片描述
登錄成功界面

在這裏插入圖片描述

2.2 服務生產者和服務消費者

演示程序的項目結構(沒有用到app.py,忽略該文件)
在這裏插入圖片描述

hello_service.py發佈服務,服務名稱爲“hello_service”

from nameko.rpc import rpc

class hello_service:
    name = "hello_service"

    @rpc
    def hello(self):
        print("hello world")

service.py調用服務

from nameko.standalone.rpc import ClusterRpcProxy

CONFIG = {'AMQP_URI': "amqp://guest:[email protected]"}


def compute():
    with ClusterRpcProxy(CONFIG) as rpc:
        rpc.hello_service.hello()


if __name__ == '__main__':
    compute()

2.3 啓動微服務

使用nameko框架的run命令啓動微服務

nameko run hello_service --broker amqp://guest:[email protected]

如果註冊中心rabbitmq沒有成功啓動,會顯示如下信息
在這裏插入圖片描述
如果現實信息如下則表示服務成功啓動

在這裏插入圖片描述
運行service.py調用服務後在命令行打印出“hello world”,服務被成功調用
在這裏插入圖片描述

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