栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

微服务rpc还是http(微服务rpc调用)

微服务rpc还是http(微服务rpc调用)

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

传统服务

优点:

①开发简单,集中式管理

②基本不会重复开发

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

缺点:

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

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

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

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

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

微服务

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()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号