微服务框架-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 0887cb8e133c /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()


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM