nacos_config.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import nacos
  2. import socket
  3. from threading import Timer
  4. import logging
  5. import time
  6. import os
  7. import requests
  8. class nacos_service:
  9. CLIENT = None
  10. DATA_ID = None
  11. GROUP = None
  12. LOCAL_IP = None
  13. SERVER_ADDRESSES = None
  14. NAMESPACE = None
  15. logger = logging.getLogger('app') # 这里设置名字
  16. __instance = None
  17. def __init__(self):
  18. self.LOCAL_IP = str(os.getenv(key="NACOS_REGISTER_IP", default=socket.gethostbyname(socket.gethostname())))
  19. self.SERVER_ADDRESSES = str(os.getenv(key="NACOS_SERVER_ADDRESS", default="http://192.168.3.80:8848"))
  20. self.NAMESPACE = str(os.getenv(key="NACOS_NAME_SPACE", default="dev"))
  21. self.DATA_ID = str(os.getenv(key="NACOS_DATA_ID", default="python-mendunr"))
  22. self.GROUP = str(os.getenv(key="DEFAULT_GROUP", default="DEFAULT_GROUP"))
  23. self.logger.info("启动参数: %s", {
  24. "IP": self.LOCAL_IP,
  25. "SERVER_ADDRESSES": self.SERVER_ADDRESSES,
  26. "NAMESPACE": self.NAMESPACE,
  27. "DATA_ID": self.DATA_ID,
  28. "nacosGroup": self.GROUP}
  29. )
  30. def __new__(cls, *args, **kwargs):
  31. if nacos_service.__instance is None:
  32. nacos_service.__instance = object.__new__(cls, *args, **kwargs)
  33. return nacos_service.__instance
  34. ### 获取配置
  35. def getConfig(self):
  36. return self.CLIENT.get_config(self.DATA_ID, self.GROUP)
  37. ### 注册实例
  38. def register_instance(self):
  39. self.logger.info("注册nacos实例 分组: %s ", self.GROUP)
  40. self.logger.info("注册nacos实例 时间: %s ", time.strftime('%H:%M:%S', time.localtime(time.time())))
  41. res = requests.post(url=self.SERVER_ADDRESSES + "/nacos/v1/ns/instance",
  42. data={
  43. 'groupName': self.GROUP,
  44. 'metadata': '{"preserved.register.source":"SPRING_CLOUD","preserved.heart.beat.interval": 5500, "preserved.heart.beat.timeout": 30000, "preserved.ip.delete.timeout": 60000}',
  45. 'namespaceId': self.NAMESPACE,
  46. 'port': 3333,
  47. 'enable': True,
  48. 'healthy': True,
  49. 'clusterName': 'DEFAULT',
  50. 'ip': self.LOCAL_IP,
  51. 'weight': 1,
  52. 'ephemeral': True,
  53. 'serviceName': self.GROUP + "@@" + self.DATA_ID
  54. })
  55. self.logger.info("register_instance res %s", str(res.content, 'UTF-8'))
  56. def send_heartbeat(self):
  57. try:
  58. res = requests.put(url=self.SERVER_ADDRESSES + "/nacos/v1/ns/instance/beat",
  59. data={
  60. "ip": self.LOCAL_IP,
  61. "port": "3333",
  62. "namespaceId": self.NAMESPACE,
  63. "serviceName": self.GROUP + "@@" + self.DATA_ID,
  64. # "groupName":self.GROUP,
  65. "clusterName": "DEFAULT"}
  66. ).json()
  67. if res["code"] == 20404: ### 找不到资源重新注册
  68. self.register_instance()
  69. # continue
  70. # time.sleep(4)
  71. t = Timer(4, self.send_heartbeat) ## 2秒执行一次
  72. t.start()
  73. except Exception as e:
  74. print(e)
  75. def getServer(self, serverName):
  76. res = requests.get(url=self.SERVER_ADDRESSES + "/nacos/v1/ns/instance/list",
  77. params={'namespaceId': self.NAMESPACE, 'serviceName': self.GROUP + "@@" + serverName})
  78. hosts = res.json()["hosts"]
  79. if len(hosts) > 0:
  80. return hosts[0]
  81. return None
  82. def start(self):
  83. try:
  84. self.logger.info("启动参数: %s", {
  85. "IP": self.LOCAL_IP,
  86. "SERVER_ADDRESSES": self.SERVER_ADDRESSES,
  87. "NAMESPACE": self.NAMESPACE,
  88. "DATA_ID": self.DATA_ID,
  89. "nacosGroup": self.GROUP}
  90. )
  91. self.CLIENT = nacos.NacosClient(self.SERVER_ADDRESSES, namespace=self.NAMESPACE)
  92. self.register_instance()
  93. self.send_heartbeat()
  94. except Exception as e:
  95. print(e)
  96. def get_nacos_configs(self):
  97. url = self.SERVER_ADDRESSES + "/nacos/v1/cs/configs"
  98. params = {
  99. 'tenant': self.NAMESPACE,
  100. 'dataId': self.DATA_ID,
  101. 'group': self.GROUP
  102. }
  103. r = requests.get(url, params)
  104. r.encoding = r.apparent_encoding
  105. r_dict = r.json()
  106. return r_dict
  107. nacos_service_single = nacos_service()
  108. # 发送url请求,获取nacos上的配置
  109. def get_nacos_configs():
  110. url = nacos_service_single.SERVER_ADDRESSES + "/nacos/v1/cs/configs"
  111. params = {
  112. 'tenant': nacos_service_single.NAMESPACE,
  113. 'dataId': nacos_service_single.DATA_ID,
  114. 'group': nacos_service_single.GROUP
  115. }
  116. r = requests.get(url, params)
  117. r.encoding = r.apparent_encoding
  118. r_dict = r.json()
  119. return r_dict