class AddService: name = 'add_service' @event_handler('productor_service', 'a') @event_handler('productor_service', 'b') def handle_message(self, payload: str): logger.debug(f'handle_message {payload}') @rpc @context_id_dec def add(self, a: int, b: int, /, context_id: str) -> int | None: try: logger.debug(f'收到一个加法计算申请:{a},{b},{asgi_context_id.get()}') # time.sleep(1000) return a+b except Exception as error: logger.exception(error) return None @http('GET', '/hi') def hi(self, request): return "hello world" @http('GET', '/ha') def ha(self, request): time.sleep(10) return 'ok'
nameko run services:AddService --config ./config.yaml
应用该命令,发现只有一个连贯:
class TrashCanService: name = 'trash_scan_service' @event_handler('hi_api', 'rubbish') def receive(self, message: str): logger.debug(f'开始生产音讯, {message}') response = requests.get('http://127.0.0.1:50010') logger.debug(f'{message}, {response.text}') receive.create_queue_only = True @event_handler('drop_throw_rubbish_service', 'drop_rubbish') def receive_by_rpc(self, message: str): passclass AddService: name = 'add_service' @event_handler('productor_service', 'a') @event_handler('productor_service', 'b') def handle_message(self, payload: str): logger.debug(f'handle_message {payload}') @rpc @context_id_dec def add(self, a: int, b: int, /, context_id: str) -> int | None: try: logger.debug(f'收到一个加法计算申请:{a},{b},{asgi_context_id.get()}') # time.sleep(1000) return a+b except Exception as error: logger.exception(error) return None @http('GET', '/hi') def hi(self, request): return "hello world" @http('GET', '/ha') def ha(self, request): time.sleep(10) return 'ok'
然而这样,两个服务,一共两个 amqp 连贯:
所以 nameko 是一个服务一个 amqp 连贯,还是每个队列 work 函数一个 amqp 连贯?
这个问题的论断就是:nameko 是一个服务一个 amqp 连贯