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"
    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'

浏览器效果查看,如下:
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())

三、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

Nameko is a framework for building microservices in Python.The example above requires RabbitMQ, because it’s using the built-in AMQP RPC features.Django REST framework is a powerful and flexible toolkit for building Web A 该软件包设置了django框架以利用ORM功能和其他一些django功能。 DjangoModels会将您所有的应用程序模型加载到暴露模型的一个空间中。 如果您将模型放入app1.models和app2.models ,则您的应用程序模型将从您选择的某个位置公开(即models或注入DjangoModels任何其他变量)。 您需要指定DJANGO_NAMEKO_STANDALONE_SETTINGS_MODULE或DJANGO_SETTINGS_MODULE环境变量,如果没有 创建 Django 项目。你可以使用 django-admin 命令行工具创建新的 Django 项目: django-admin startproject myproject 这将创建一个名为 myproject 的目录...
Django 是一个非常成熟的 Python web 框架,适用于构建大型网站和 web 应用程序。它提供了许多内置功能,如身份验证、数据库支持、管理界面等,这些都可以大大减少开发时间。 尽管如此,Django 不一定适合做微服务微服务架构通常需要更灵活的构建方式和更小的运行时开销,而Django更倾向于高度组织化和高度集成。因此,如果你需要建立微服务架构,可能需要考虑其他更轻量级的框架。
namekopython语言的一个微服务框架,支持通过 rabbitmq 消息队列传递的 rpc 调用,也支持 http 调用。本文主要介绍 nameko 的 rpc 调用以及一些注意事项。 本文采用项目结构如下: project services service1 init.py service1.py service2 init.py service2.py utils init.py dependencie
1.分布式:一个业务分拆多个子业务,部署在不同的服务器上 2.集群:同一个业务,部署在多个服务器上 分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。 分布式是否属于微服务? 答案是肯定的。 微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式
Django-microservices可帮助您管理Django中内置的微服务的开发和交互。 您正在使用Django构建具有微服务架构的应用程序。 您具有通过HTTP与每个服务器通信的服务器服务,每个服务都是它自己的Django项目。 您需要为每个服务运行./manage.py runserver [port]来启动它,并在开发时具有应用程序功能。 Django微服务可通过以下方式提供帮助: 给您一个/.manage.py runcluster命令来启动每个项目的开发服务器 提供一种服务发现API,使您的服务可以相互查找 Django的 与构成您的micoservices应用程序的django项目一起创建一个新的虚拟环境和django项目: $ mkvirutalenv myapp_service_manager $ pip install d
(1). Web开发介绍 目前Web开发属于Browser/Server模式,简称BS架构,开发语言有(Python、PHP、Java ...)。基于Python的Web工作原理如下:(2). 框架介绍 ①. 什么是框架? 软件框架就是为实现或完成某种软件开发时,提供了一些基础的软件产品,框架的功能类似于基础设施,提供并实现最为基础的软件架构和体系通常情况下我们依据框架来实现更为复杂的业务程序开发...
Python被用作后端开发语言。 Django被用作后端框架。 Django REST框架或DRF用作REST API开发框架,Mongodb用作数据库后端,Nginx用作API网关,最后使用docker作为部署方法。 Swagger用于记录API 每个服务的单独数据库都完全解耦。 Nginx位于每个服务的前面,以将所有微服务API端点抽象为一个端点。 供测试用: 在services文件夹中运行“ docker-compose build” 在docker完成所有构建人员的工作后,运行“ docker-compose up -d”以运行每个微服务。 现在转到您的本地主机,docker计算机ip或服务器ip来访问API端点。 API端点:请参阅/ api / v1 / {services} / do
yangtom249: [code=plain] cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language> [/code] Django安装和项目创建 yangtom249: Python\Python38\Scripts django-admin.exe django-admin.py