【问题标题】:How to call microservice-2 from microservice-1 using python?如何使用 python 从 microservice-1 调用 microservice-2?
【发布时间】:2020-02-10 09:37:33
【问题描述】:

如何从 microservice-1 调用我的 microservice-2。所以我们的结果是这样的:-

结果:- {“message”: “vivek”} --> {“message”: “keviv”, “random”: 3.89}

访问 microservice-1 的命令:-

curl http://127.0.0.1:5000/reverse_random/vivek

微服务-1

from flask import Flask, jsonify
app = Flask(__name__)

@app.route('/reverse_reandom/<string:string>', methods=['GET'])
def reverse(string):
    string = string[::-1]
    return jsonify({'message': string })


if __name__ == '__main__':
   app.run(debug = True)

微服务-2

import random
from flask import Flask, jsonify

app = Flask(__name__)


@app.route('/', methods=['GET'])
def myRandom():
    r1 = random.uniform(0, 10)
    return jsonify({'message': r1 })

if __name__ == '__main__':
    app.run(debug=True)

【问题讨论】:

  • 您在 microservice-2 中出现语法错误。第三行应该是app = Flask(__name__)
  • 另外,如果你使用同一台机器运行两个服务器,你应该在不同的端口上运行第二个微服务
  • 在我的例子中,我需要为这两个微服务创建两个不同的容器。例如:- container-1 和 microservice-1,container-2 和 microservice-2。
  • 好的。在码头集装箱中?您是否尝试包装答案中提供的代码?它应该可以工作。
  • 谢谢,可以了,现在需要制作一个docker镜像容器。

标签: python flask microservices


【解决方案1】:

要在服务之间连接,您可以使用后台任务,例如 celeryramq 或使用 nsqnats

【讨论】:

    【解决方案2】:

    在不同的端口上运行 microservice-2。使用 Python 标准或来自 microservice-1 的第 3 方库发送请求 根据向 microservice-1 的请求发送到 microservice-2。

    以下是仅使用 Python3 标准库的示例:

    m1.py:

    from flask import Flask, jsonify
    import urllib
    import json 
    
    app = Flask(__name__)
    
    @app.route('/reverse_random/<string:string>', methods=['GET'])
    def reverse(string):
        content = urllib.request.urlopen('http://127.0.0.1:5001').read().decode('utf-8')
        print('response from m2: ', content)
        string = string[::-1]
        return jsonify({'message': string, 'random' : json.loads(content)['message']})
    
    
    if __name__ == '__main__':
       app.run(debug = True)
    

    m2.py

    import random
    from flask import Flask, jsonify
    
    app = Flask(__name__)
    
    @app.route('/', methods=['GET'])
    def myRandom():
        r1 = random.uniform(0, 10)
    
        return jsonify({'message': r1 })
    
    if __name__ == '__main__':
        app.run(debug=True, port=5001) # running m2 on a different port than default 5000
    

    运行m1:python3 m1.py

    在不同的 shell 中运行 m2:python3 m2.py

    向m1发送请求:curl http://127.0.0.1:5000/reverse_random/vivek

    结果是:

    { 
      "message": "keviv",  
      "random": 4.138115905045612 
    } 
    

    观察 m1 和 m2 的日志,确保调用了 m2。

    【讨论】:

      【解决方案3】:

      您需要向service 2 发出GET 请求以获取随机数,我建议为此使用requests,例如

      r = requests.get('url-for-service-2:port/')
      data = r.json()
      random_num = data['message']
      

      请记住检查 data 对象的 message 键,或使用 .get() 或等效项

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 2021-02-15
        • 2020-12-07
        • 2020-07-11
        • 2017-08-22
        • 1970-01-01
        • 2022-12-02
        相关资源
        最近更新 更多