nacos_config.py 5.3 KB

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