赞
踩
github 的nacos项目的发布页(Releases · alibaba/nacos · GitHub ),选择所要下载的nacos版本,在nacos下方的assets中选择安装包进行下载。
解压nacos安装包到指定目录。
tar -zxvf nacos-server-2.0.3.tar.gz
初始化Nacos数据库。
- -- 需要先选择数据库
- -- 初始化sql脚本位于解压的 nacos/conf 目录下
- use nacosdb;
- source /euansu/apps/nacos/conf/nacos-mysql.sql;
修改nacos配置文件。
- # nacos/conf/application.properties
- # 默认的web路由
- server.servlet.contextPath=/nacos
- # web服务端口
- server.port=8848
- # 数据库配置
- db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
- db.user.0=nacos
- db.password.0=nacos
启动Nacos服务,这里只是以单机模式启动Nacos。
bin/startup.sh -m standalone
启动完成之后,访问页面进行验证。
如果没有在配置文件中修改密码,这里的用户名和密码是:nacos/nacos,直接登录即可。
Nacos注册接口(注册一个实例服务到Naocs上)
请求方式:POST
请求参数:
名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
ip | 字符串 | 是 | 服务实例IP |
port | int | 是 | 服务实例port |
namespaceId | 字符串 | 否 | 命名空间ID |
weight | double | 否 | 权重 |
enabled | boolean | 否 | 是否上线 |
healthy | boolean | 否 | 是否健康 |
metadata | 字符串 | 否 | 扩展信息 |
clusterName | 字符串 | 否 | 集群名 |
serviceName | 字符串 | 是 | 服务名 |
groupName | 字符串 | 否 | 分组名 |
ephemeral | boolean | 否 | 是否临时实例 |
返回参数:
返回代码 | 描述 | 语义 |
---|---|---|
400 | Bad Request | 客户端请求中的语法错误 |
403 | Forbidden | 没有权限 |
404 | Not Found | 无法找到资源 |
500 | Internal Server Error | 服务器内部错误 |
200 | OK | 正常 |
请求测试:
请求接口后,在Nacos页面出现注册的服务,如下:
查看详细信息
Nacos服务检测接口:
请求方式:PUT
请求参数:
名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
serviceName | 字符串 | 是 | 服务名 |
ip | 字符串 | 是 | 服务实例IP |
port | int | 是 | 服务实例PORT |
namespaceId | 字符串 | 否 | 命名空间ID |
groupName | 字符串 | 否 | 分组名 |
ephemeral | boolean | 否 | 是否临时实例 |
beat | JSON格式字符串 | 是 | 实例心跳内容 |
响应参数:
响应代码 | 描述 | 语义 |
---|---|---|
400 | Bad Request | 客户端请求中的语法错误 |
403 | Forbidden | 没有权限 |
404 | Not Found | 无法找到资源 |
500 | Internal Server Error | 服务器内部错误 |
200 | OK | 正常 |
请求测试:
将Python服务注册到Nacos上至少需要两个接口,一个是实例注册接口,另一个则是心跳接口,只进行了注册,则会出现如下的情况:
时间稍长之后,注册的服务也会消失。
因此,需要按照心跳时间请求nacos服务检测接口,默认是5s。
Python这里可以通过写一个脚本实现Nacos服务的注册,实现代码如下:
- import time
- import requests
-
- # 心跳时间
- HEARTBEATS_TIME = 5
- # Nacos地址
- NACOS_URL = 'http://xx.xx.xx.xx:8848/nacos'
- # 服务注册路由
- NACOR_REGISTER_URL = 'v1/ns/instance'
- # 心跳检测路由
- NACOS_HEARTBEATS_URL = 'v1/ns/instance/beat'
-
-
- # Nacos服务注册
- def service_register():
- """
- Nacos服务注册的接口有以下参数:
- ip 服务实例IP
- port 服务实例port
- namespaceId 命名空间ID
- weight 权重
- enabled 是否上线
- healthy 是否健康
- metadata 扩展信息
- clusterName 集群名
- serviceName 服务名
- groupName 分组名
- ephemeral 是否临时实例
- :return:
- """
- # 返回参数
- result = {
- "code": 200,
- "message": "success"
- }
- # 构造请求参数
- params = {
- 'serviceName': 'python-service',
- 'ip': 'xx.xx.xx.xx',
- 'port': 8845
- }
- response = requests.post(
- "{NACOS_URL}/{NACOR_REGISTER_URL}".format(NACOS_URL=NACOS_URL, NACOR_REGISTER_URL=NACOR_REGISTER_URL),
- params=params)
- if response.status_code != 200:
- result["code"] = response.status_code
- result["message"] = "服务注册Nacos失败,失败原因:{error_message}".format(error_message=response.text)
- return result
- if response.text != 'ok':
- result["code"] = 500
- result["message"] = "服务注册Nacos失败,失败原因:{error_message}".format(error_message=response.text)
- return result
- return result
-
-
- def service_beat():
- """
- 服务心跳,默认是5s一次
- :return:
- nacos的服务心跳接口有以下参数
- serviceName 服务名
- ip 服务实例IP
- port 服务实例PORT
- namespaceId 命名空间ID
- groupName 分组名
- ephemeral 是否临时实例
- beat 实例心跳内容
- """
- # 构造请求参数
- params = {
- "serviceName": "python-service",
- 'ip': 'xx.xx.xx.xx',
- 'port': 8845
- }
- while True:
- response = requests.put(
- "{NACOS_URL}/{NACOS_HEARTBEATS_URL}".format(NACOS_URL=NACOS_URL, NACOS_HEARTBEATS_URL=NACOS_HEARTBEATS_URL),
- params=params)
- print("已注册服务,执行心跳服务,续期服务响应状态: {status_code}".format(status_code=response.status_code))
- time.sleep(HEARTBEATS_TIME)
-
- def main():
- # 注册服务
- service_register()
- # 服务检测
- service_beat()
-
-
- if __name__ == '__main__':
- main()
实现效果:
nacos文档:Open API 指南
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。