首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Nameko和Flask之间没有路由

Nameko和Flask之间没有路由
EN

Stack Overflow用户
提问于 2018-06-04 03:22:17
回答 2查看 733关注 0票数 1

如果你在一小时前或几乎一小时前看到我的最后一个问题!

我设法解决了很多问题,但我被一个问题困住了,我不明白为什么我会有这个问题。我更喜欢做一个新的线程,因为错误是不一样的,对于未来的读者来说,它会更清楚。

正如我在上一个问题中所说的,我的目标是使用Python和Nameko实现微服务,从Flask web应用程序发送结果、接收信息和查询(将来还会有许多Flask web应用程序)。但是我现在有一个- 312路由问题。

来自我的Nameko应用程序的代码:

代码语言:javascript
复制
# -*-coding:utf-8 -*

# namekotesting.py

from nameko.rpc import rpc

class firstService:
        name = "First microservice"
        result = "";

        @rpc
        def mymethode(self, test):
                result = test
                return result

来自Flask应用程序的代码:

代码语言:javascript
复制
#! /usr/bin/python
# -*- coding:utf-8 -*-

from flask import Flask, request
from flasgger import Swagger
from nameko.standalone.rpc import ClusterRpcProxy

app = Flask(__name__)
Swagger(app)
CONFIG = {'AMQP_URI': "amqp://guest:guest@<myipserverhere>:5672"}

@app.route('/', methods=['GET', 'POST'])

def mymethode():
        with ClusterRpcProxy(CONFIG) as rpc:
                littletest = rpc.firstService.mymethode("hello")

def index():
        return littletest

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True, port=5000)

现在,错误是:

代码语言:javascript
复制
 * Serving Flask app "flasktest" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 126-185-375
[03/Jun/2018 21:04:27] "GET / HTTP/1.1" 500 -
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/oyo/flasktest/flasktest.py", line 16, in mamethode
    petittest = rpc.premierService.mamethode("voici")
  File "/usr/local/lib/python2.7/dist-packages/nameko/rpc.py", line 368, in __call__
    reply = self._call(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/nameko/rpc.py", line 437, in _call
    extra_headers=extra_headers
  File "/usr/local/lib/python2.7/dist-packages/nameko/amqp/publish.py", line 189, in publish
    **publish_kwargs
  File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 181, in publish
    exchange_name, declare,
  File "/usr/local/lib/python2.7/dist-packages/kombu/connection.py", line 494, in _ensured
    return fun(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/kombu/messaging.py", line 203, in _publish
    mandatory=mandatory, immediate=immediate,
  File "/usr/local/lib/python2.7/dist-packages/amqp/channel.py", line 1743, in basic_publish_confirm
    self.wait(spec.Basic.Ack)
  File "/usr/local/lib/python2.7/dist-packages/amqp/abstract_channel.py", line 79, in wait
    self.connection.drain_events(timeout=timeout)
  File "/usr/local/lib/python2.7/dist-packages/amqp/connection.py", line 491, in drain_events
    while not self.blocking_read(timeout):
  File "/usr/local/lib/python2.7/dist-packages/amqp/connection.py", line 497, in blocking_read
    return self.on_inbound_frame(frame)
  File "/usr/local/lib/python2.7/dist-packages/amqp/method_framing.py", line 77, in on_frame
    callback(channel, msg.frame_method, msg.frame_args, msg)
  File "/usr/local/lib/python2.7/dist-packages/amqp/connection.py", line 501, in on_inbound_method
    method_sig, payload, content,
  File "/usr/local/lib/python2.7/dist-packages/amqp/abstract_channel.py", line 128, in dispatch_method
    listener(*args)
  File "/usr/local/lib/python2.7/dist-packages/amqp/channel.py", line 1960, in _on_basic_return
    raise exc
ChannelError: Basic.return: (312) NO_ROUTE

现在我将继续使用这个线程来完成我的测试(如果我有另一个问题我无法解决)。在那之后,我想我将能够制作我的框架,这要感谢它。对于这个问题,有什么建议,提示或帮助吗?

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 22:39:13

服务类上的name属性是如何寻址服务的。

代码语言:javascript
复制
class firstService:
    name = "first"

    @rpc
    def method(self):
        pass

所以

代码语言:javascript
复制
>>> rpc.firstService.method()  # won't work
>>> rpc.first.method()         # will work

而且,看起来您使用的py-amqp版本太现代了。安装Nameko后升级了吗?应该是v1.4.9。使用该版本,您会得到一个更有用的“未知服务”错误返回。

票数 2
EN

Stack Overflow用户

发布于 2018-06-04 03:35:52

当“强制”消息无法传递到任何队列时,RabbitMQ使用“basic.return”返回。

你能运行这个吗?

代码语言:javascript
复制
rabbitmq-plugins enable rabbitmq_management

然后打开

代码语言:javascript
复制
http://server-name:15672/ #server-name i think is `localhost` 

使用acc guest和密码guest docs登录

将会有关于queueschannelsexchanges等的所有信息。

是否声明了要将消息发送到的queue

如果没有queue,则创建它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档