微服务rpc

本文介绍了微服务架构的概念及其相对于传统服务的优势和劣势。接着,详细讲解了Python的微服务框架Nameko,包括安装、MQ设置、RPC服务端代码编写以及服务的启动和调用。通过示例代码展示了如何创建并运行Nameko服务,为读者提供了一个快速上手Nameko的教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微服务框架-nameko

1.微服务架构

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

传统服务

优点:

①开发简单,集中式管理

②基本不会重复开发

③功能都在本地,没有分布式的管理和调用消耗

缺点:

1、效率低:开发都在同一个项目改代码,相互等待,冲突不断

2、维护难:代码功功能耦合在一起,新人不知道何从下手

3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时

4、稳定性差:一个微小的问题,都可能导致整个应用挂掉

5、扩展性不够:无法满足高并发下的业务需求

img

微服务

img

2.nameko介绍

nameko 是python语言的一个微服务框架,支持通过 rabbitmq 消息队列传递的 rpc 调用,也支持 http 调用。
​
pip install nameko 

3.mq安装

docker pull rabbitmq
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
​
docker ps 
docker exec -it 镜像ID /bin/bash
docker exec -it 83a776c69593 /bin/bash
​
rabbitmq-plugins enable rabbitmq_management
​
用户名密码:guest

4.rpc服务端代码

#新建service.py
​
from nameko.rpc import rpc
class service:
    name = "service"
​
    @rpc
    def hello(self, name):
        print("hello")
        return "Hello, {}!".format(name)

5.调用

#新建get_service.py
​
from nameko.standalone.rpc import ClusterRpcProxy
CONFIG={'AMQP_URI':'amqp://guest:guest@localhost'}
​
def compute():
    with ClusterRpcProxy(CONFIG) as rpc:
        res = rpc.service.hello('adf')
        print(res)
​
if __name__=='__main__':
    compute()

6.启动服务

在项目目录下执行

nameko run service --broker amqp://guest:guest@localhost

7.批量启动service

import eventlet; 
eventlet.monkey_patch()
import importlib
from pathlib import Path
import os
path = os.path.dirname(__file__) 
def run_all():
    services = {}
​
    for dir_path,dir_names,file_names in os.walk(path):
        for filename in file_names:
            if filename.endswith("service.py"):
                name,ext = os.path.splitext(filename)
                service = importlib.import_module(name)
                services[name] = service
​
    from nameko.runners import ServiceRunner
​
    runner = ServiceRunner(config={"AMQP_URI": "amqp://guest:guest@localhost"})
    for name, service in services.items():
        cls = getattr(service, name)
        runner.add_service(cls)
    runner.start()
    runner.wait()
​
if __name__=='__main__':
    run_all()
= getattr(service, name)
        runner.add_service(cls)
    runner.start()
    runner.wait()
​
if __name__=='__main__':
    run_all()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值