定制网站Python发布微服务到注册中心Nacos

文章目录

1.准备工作

1.1.安装python环境

,定制网站在官网下载python定制网站安装包以后,进行安装,定制网站配置好对应的环境变量(ps定制网站使用安装包安装,定制网站界面有添加到python定制网站到环境变量选项)。

1.2.安装框架

该框架(函数库)是python的一款MVC框架,相信做web定制网站端开发过来的,定制网站都比较容易理解,尤其Java,例如SpringMVC框架。定制网站这个主要是用来开发HTTP接口的。

pip install flask
  • 1

1.3.安装requests函数库

定制网站这个是用来发起Http请求的,定制网站因为我们如果将服务发定制网站布到注册中心的话,定制网站需要我们向注册中心发起http请求。

pip install requests
  • 1

1.4.定制网站安装注册中心

安装略
nacos定制网站服务端访问地址:http://:8848/nacos。具体nacos定制网站学习参考如下两个
nacos github地址:
nacos 定制网站官方中文学习网:

2.python发布http/rest接口

创建demo.py

2.1.发布http+get

创建一个py文件,例如demo.py

from flask import Flask,jsonify,request'''python发布restful服务实例@author:hutao@date: 2022-04-11'''#初始化。官方解释:http://flask.pocoo.org/docs/0.12/api/#flask.Flaskserver = Flask(__name__)#处理乱码server.config['JSON_AS_ASCII']=False'''使用rest进行get请求,定制网站通过请求拼接参数进行传参,其中name是传参请求实例:http://127.0.0.1:8085/simulation/analysis?name=胡涛请求参数:请求地址中的name=胡涛响应参数:{    "code": "200",    "data": {        "age": 25,        "job": "python",        "name": "胡涛"    },    "msg": "SUCCES"}'''@server.route('/simulation/analysis',methods=['get'])def demo_rest_get_request():    # 处理业务逻辑    name = request.args['name']    result = {"code":"200","msg":"SUCCES","data":{"name":name,"age":25,"job":"python"}}    return jsonify(result)if __name__ == "__main__":    server.run(port=8085,debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

启动该demo.py文件,然后通过postman工具调用这个接口,效果如下所示。

2.2.发布http+post+json

'''使用rest进行post请求,通过请求提 json传参,其中name是传参请求地址:http://127.0.0.1:8085/simulation/analysis请求参数:{    "name":"胡涛",    "job":"java"}响应参数:{    "code": "200",    "data": {        "age": 25,        "job": "java",        "name": "胡涛"    },    "msg": "SUCCES"}'''@server.route('/simulation/analysis',methods=['post'])def demo_rest_post_request():    # 处理业务逻辑    name = request.json.get('name')    job = request.json.get('job')    result = {"code":"200","msg":"SUCCES","data":{"name":name,"age":25,"job":job}}    return jsonify(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2.3.发布restful

'''使用restful进行get请求,通过请求地址进行传参,其中胡涛是传参请求地址:http://127.0.0.1:8085/simulation/analysis/胡涛请求参数:将地址中的胡涛映射到属性字段name上响应参数:{    "code": "200",    "data": {        "age": 26,        "job": "python",        "name": "胡涛"    },    "msg": "SUCCES"}'''@server.route('/simulation/analysis/<name>',methods=['get'])def demo_restful_request(name):    result = {"code":"200","msg":"SUCCES","data":{"name":name,"age":25,"job":"python"}}return jsonify(result)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3.Java通过rest请求接口

//调用python服务String url = "http://127.0.0.1:8085/simulation/analysis?name=hutao";ResponseEntity<RestData> forEntity = restTemplate.getForEntity(url, RestData.class);RestData<PythonData> data = forEntity.getBody();
  • 1
  • 2
  • 3
  • 4

4.Python服务注册

4.1.Nacos注册接口

通过postman对nacos服务发起注册请求即可。

  1. 请求地址:http://127.0.0.1:8848/nacos/v1/ns/instance
  2. 请求方式:POST
  3. 请求参数:

备注:请求参数并不是Json格式,不同版本,可能会存在差异,本人使用的是1.4.3版本,请求参数并不能通过json格式提交。而是在请求地址后面拼接参数。

http://49.232.70.33:8848/nacos/v1/ns/instance?serviceName=algorithm-service&ip=127.0.0.1&port=8085
  • 1

不过这个不是重点,具体什么请求参数,什么请求方式,这个由于nacos开源,可以自己去定义的。

该接口返回OK以后,即注册成功,此时登陆注册中心,即可看到我们注册的服务。

4.2.Nacos心跳接口

上述注册的接口,会在一段时间内和注册中心断开,因此注册中心没有收到客户端(注册的服务)的心跳,因此判断该服务出问题,该版本大概是15秒左右,就会变成如下这样。过一段时间后,任然没有心跳,则会在服务列表剔除。

因此为了保证我们的服务注册上以后,保持健康状态,即让注册中心知道我们的服务没有问题,网络可达,因此需要定期向注册中心发起心跳检测的请求。

  1. 请求地址:http://127.0.0.1:8848/nacos/v1/ns/instance/beat
  2. 请求方式:put
  3. 请求参数:同注册
http://127.0.0.1:8848/nacos/v1/ns/instance/beat?serviceName=algorithm-service&ip=127.0.0.1&port=8085
  • 1

4.3.python实现思路

我们已经知道了通过上述两个接口,即可实现注册和心跳检测,因此,我们只需要将我们的python服务发布http接口的时候,给注册中心发起一个请求进行注册即可,接着在通过一个异步任务定时的向注册中心发起心跳检测即可。
当然,目前也有一些开源的软件实现了,不过笔者并不推荐,因为从技术上来说,这个真的很简单,自己实现即可,就是python给注册中心发起请求而已,并没有什么太复杂的功能。
例如目前开源了nacos-sdk-python,不过由于不同版本的nacos可能存在版本差异,导致到时候调试或者开发存在其他问题,因此不推荐使用。因为nacos开源,并且我们安装的nacos可能会是我们定制化后的。因此推荐你直接调用你所部署的nacos的服务接口

4.3.1.调用Nacos注册接口

#nacos服务注册def service_register():    url = "http://49.232.70.33:8848/nacos/v1/ns/instance?serviceName=algorithm-service&ip=127.0.0.1&port=8085"    res = requests.post(url)    print("向nacos注册中心,发起服务注册请求,注册响应状态: {}".format(res.status_code))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.3.2.调用Nacos心跳接口

#服务检测(每5秒心跳一次)def service_beat():    while True:        url = "http://49.232.70.33:8848/nacos/v1/ns/instance/beat?serviceName=algorithm-service&ip=127.0.0.1&port=8085"        res = requests.put(url)        print("已注册服务,执行心跳服务,续期服务响应状态: {}".format(res.status_code))        time.sleep(5)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.4.完整代码示例

from flask import Flask,jsonify,requestimport requestsimport threadingimport time'''python发布restful服务实例@author:hutao@date: 2022-04-11'''# Flask初始化参数尽量使用你的包名,这个初始化方式是官方推荐的,官方解释:http://flask.pocoo.org/docs/0.12/api/#flask.Flaskserver = Flask(__name__)#处理乱码server.config['JSON_AS_ASCII']=False'''使用restful进行get请求,通过请求地址进行传参,其中胡涛是传参请求地址:http://127.0.0.1:8085/simulation/analysis/胡涛请求参数:将地址中的胡涛映射到属性字段name上响应参数:{    "code": "200",    "data": {        "age": 25,        "job": "python",        "name": "胡涛"    },    "msg": "SUCCES"}'''@server.route('/simulation/analysis/<name>',methods=['get'])def demo_restful_request(name):    # 处理业务逻辑    #name = request.args['name']    result = {"code":"200","msg":"SUCCES","data":{"name":name,"age":25,"job":"python"}}    return jsonify(result)'''使用rest进行get请求,通过请求拼接参数进行传参,其中name是传参请求实例:http://127.0.0.1:8085/simulation/analysis?name=胡涛请求参数:请求地址中的name=胡涛响应参数:{    "code": "200",    "data": {        "age": 25,        "job": "python",        "name": "胡涛"    },    "msg": "SUCCES"}'''@server.route('/simulation/analysis',methods=['get'])def demo_rest_get_request():    # 处理业务逻辑    name = request.args['name']    result = {"code":"200","msg":"SUCCES","data":{"name":name,"age":25,"job":"python"}}    return jsonify(result)'''使用rest进行post请求,通过请求提 json传参,其中name是传参请求地址:http://127.0.0.1:8085/simulation/analysis请求参数:{    "name":"胡涛",    "job":"java"}响应参数:{    "code": "200",    "data": {        "age": 25,        "job": "java",        "name": "胡涛"    },    "msg": "SUCCES"}'''@server.route('/simulation/analysis',methods=['post'])def demo_rest_post_request():    # 处理业务逻辑    name = request.json.get('name')    job = request.json.get('job')    result = {"code":"200","msg":"SUCCES","data":{"name":name,"age":25,"job":job}}    return jsonify(result)#nacos注册中心信息'''将服务注册到注册中心注册说明:将http://127.0.0.1:8085/**这个服务上的所有服务注册到注册中心,并且起名叫做algorithm-service其他微服务进行访问时,访问http://algorithm-service/**即可,即其他服务,使用algorithm-service去注册中心,寻找真实的ip地址例如原本访问 post访问:http://127.0.0.1:8085/simulation/analysis 此时变成 http://algorithm-service/simulation/analysis'''#nacos服务def service_register():    url = "http://49.232.70.33:8848/nacos/v1/ns/instance?serviceName=algorithm-service&ip=127.0.0.1&port=8085"    res = requests.post(url)    print("向nacos注册中心,发起服务注册请求,注册响应状态: {}".format(res.status_code))#服务检测def service_beat():    while True:        url = "http://49.232.70.33:8848/nacos/v1/ns/instance/beat?serviceName=algorithm-service&ip=127.0.0.1&port=8085"        res = requests.put(url)        print("已注册服务,执行心跳服务,续期服务响应状态: {}".format(res.status_code))        time.sleep(5)#发布http服务,并且注册到nocosif __name__ == "__main__":    service_register()    #5秒以后,异步执行service_beat()方法    threading.Timer(5,service_beat).start()    server.run(port=8085,debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110

5.Java调用

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发