IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django调用Nameko微服务使用简介 -> 正文阅读

[Python知识库]Django调用Nameko微服务使用简介

Nameko is a framework for building microservices in Python.
The example requires RabbitMQ, because it’s using the Nameko built-in AMQP RPC features.
Nameko微服务框架基于RabbitMQ的RPC远程调用协议。
Django REST framework is a powerful and flexible toolkit for building Web APIs.

一、前提

安装并运行RabbitMQ
在开发环境中使用 RabbitMQ 最简单的方式就是运行其官方的 docker 容器。(安装过程略)

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

如果运行docker时没有指定用户名和密码,则使用默认值【guest】

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

网址:http://localhost:15672/
rabbitMQ

二、发布Nameko微服务

2.1、Install with Pip

pip install nameko

2.2、Service code

from nameko.rpc import rpc


# A Nameko service is just a Python class
class ServiceRpc:
    # 微服务名称
    name = "service_rpc_hello"

    @rpc
    def hello(self, name):
        return {"result": "Hello, {}!".format(name)}

2.3、Running a Service

2.3.1、使用命令参数指定RabbitMQ服务

nameko run --broker amqp://guest:guest@192.168.0.46 service_rpc

2.3.2、使用yaml配置文件指定RabbitMQ服务

nameko run --config rabbitmq.yaml service_rpc

rabbitmq.yaml 文件内容,如下:

AMQP_URI: 'pyamqp://guest:guest@192.168.0.46'

console

浏览器效果查看,如下:
services

2.4、调用服务演示

from nameko.standalone.rpc import ClusterRpcProxy

config = {
    'AMQP_URI': 'pyamqp://guest:guest@192.168.0.46'
}


if __name__ == '__main__':
    with ClusterRpcProxy(config) as cluster_rpc:
    	# 同步调用
        res = cluster_rpc.service_rpc_hello.hello("firstname")
        print(res)
        # 异步调用
        res = cluster_rpc.service_rpc_hello.hello.call_async("asyname")
        print(res.result())

hello-cluster

三、Django调用Nameko微服务

创建Django官网示例mysite项目(略,参见:https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/),示例代码使用DRF框架编写API接口。

3.1、pip install django_nameko

3.2、settings.py 增加nameko配置

# amqp地址
NAMEKO_CONFIG = {
    'AMQP_URI': 'amqp://guest:guest@192.168.101.46'
}
# 设置连接超时
NAMEKO_TIMEOUT = 10

3.3、api.py 后台接口

在polls文件夹中,新建api.py

from django_nameko import get_pool
from rest_framework.response import Response
from rest_framework.decorators import action
from rest_framework.viewsets import ModelViewSet


class NamekoViewSet(ModelViewSet):

    @action(detail=False, url_path='hello', methods=['GET'])
    def hello_msg(self, request, *args, **kwargs):
        name = self.request.query_params.get('name', 'world')
        try:
            with get_pool().next() as rpc:
                res = rpc.service_rpc_hello.hello(name)
                return Response({'result': 'hello {}!'.format(res)}, status=200)
        except Exception as e:
            print(e)
        return Response({'result': 'hello world!'}, status=200)

    @action(detail=False, url_path='hello_async', methods=['GET'])
    def hello_async(self, request, *args, **kwargs):
        name = self.request.query_params.get('name', 'world')
        try:
            with get_pool().next() as rpc:
                res = rpc.service_rpc_hello.hello.call_async(name)
                return Response(res.result(), status=200)
        except Exception as e:
            print(e)
        return Response({'result': 'hello world!'}, status=200)

3.4、urls.py

在polls的urls.py文件中,配置如下:

from .api import NamekoViewSet

router = routers.DefaultRouter()
router.register(r'', NamekoViewSet, basename='api')

3.5、浏览器查看效果

启动django项目

python manage.py runserver 0.0.0.0:8001

浏览器访问hello_async网址
hello-async

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:39:24  更:2022-04-07 22:40:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:34:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码