Kaynağa Gözat

提交代码

yulongyan_citu 1 yıl önce
ebeveyn
işleme
69b22e52df
2 değiştirilmiş dosya ile 62 ekleme ve 63 silme
  1. 3 1
      app.py
  2. 59 62
      configs/nacos_config.py

+ 3 - 1
app.py

@@ -3,15 +3,17 @@ import platform
 import os
 from flask import Flask
 from flask_cors import CORS
+from configs.nacos_config import nacos_service_single
 from interfaces.resume import resume
 from interfaces.rocketmq import rocket
 import logging
 from logging.handlers import TimedRotatingFileHandler
 
+
 app = Flask(__name__)
 app.config['JSON_AS_ASCII'] = False
 CORS(app, resources=r'/*')
-
+nacos_service_single.start()
 # 注册蓝图
 app.register_blueprint(resume, url_prefix='/resume')
 app.register_blueprint(rocket, url_prefix='/rocket')

+ 59 - 62
configs/nacos_config.py

@@ -7,7 +7,7 @@ import os
 import requests
 
 
-class nacos_service:
+class NacosService:
     CLIENT = None
     DATA_ID = None
     GROUP = None
@@ -17,29 +17,23 @@ class nacos_service:
     logger = logging.getLogger('app')  # 这里设置名字
 
     __instance = None
+    _registered = False  # 添加注册标志位
 
     def __init__(self):
         if os.name == 'posix':  # 'posix' 表示类Unix系统,包括Linux
-            default_address = "http://127.0.0.1:8848"
+            default_address = "127.0.0.1:8848"
         else:
-            default_address = "http://192.168.3.80:8848"
-        self.LOCAL_IP = str(os.getenv(key="NACOS_REGISTER_IP", default=socket.gethostbyname(socket.gethostname())))
-        self.SERVER_ADDRESSES = str(os.getenv(key="NACOS_SERVER_ADDRESS", default=default_address))
-        self.NAMESPACE = str(os.getenv(key="NACOS_NAME_SPACE", default="dev"))
-        self.DATA_ID = str(os.getenv(key="NACOS_DATA_ID", default="python-mendunr"))
-        self.GROUP = str(os.getenv(key="DEFAULT_GROUP", default="DEFAULT_GROUP"))
-        self.logger.info("启动参数: %s", {
-            "IP": self.LOCAL_IP,
-            "SERVER_ADDRESSES": self.SERVER_ADDRESSES,
-            "NAMESPACE": self.NAMESPACE,
-            "DATA_ID": self.DATA_ID,
-            "nacosGroup": self.GROUP}
-                         )
+            default_address = "192.168.3.80:8848"
+        self.LOCAL_IP = str(os.getenv("NACOS_REGISTER_IP", default=socket.gethostbyname(socket.gethostname())))
+        self.SERVER_ADDRESSES = default_address
+        self.NAMESPACE = "dev"
+        self.DATA_ID = "python-mendunr"
+        self.GROUP = "DEFAULT_GROUP"
 
     def __new__(cls, *args, **kwargs):
-        if nacos_service.__instance is None:
-            nacos_service.__instance = object.__new__(cls, *args, **kwargs)
-        return nacos_service.__instance
+        if NacosService.__instance is None:
+            NacosService.__instance = object.__new__(cls, *args, **kwargs)
+        return NacosService.__instance
 
     ### 获取配置
     def getConfig(self):
@@ -47,9 +41,10 @@ class nacos_service:
 
     ### 注册实例
     def register_instance(self):
-        self.logger.info("注册nacos实例  分组: %s ", self.GROUP)
-        self.logger.info("注册nacos实例  时间: %s ", time.strftime('%H:%M:%S', time.localtime(time.time())))
-        res = requests.post(url=self.SERVER_ADDRESSES + "/nacos/v1/ns/instance",
+        if self._registered:
+            return
+
+        res = requests.post(url=f"http://{self.SERVER_ADDRESSES}/nacos/v1/ns/instance",
                             data={
                                 'groupName': self.GROUP,
                                 'metadata': '{"preserved.register.source":"SPRING_CLOUD","preserved.heart.beat.interval": 5500, "preserved.heart.beat.timeout": 30000, "preserved.ip.delete.timeout": 60000}',
@@ -60,79 +55,81 @@ class nacos_service:
                                 'clusterName': 'DEFAULT',
                                 'ip': self.LOCAL_IP,
                                 'weight': 1,
-                                'ephemeral': True,
+                                'ephemeral': False,  # 修改这里为 False
                                 'serviceName': self.GROUP + "@@" + self.DATA_ID
                             })
-        self.logger.info("register_instance res %s", str(res.content, 'UTF-8'))
+        if res.status_code == 200:
+            self.logger.info("register_instance res %s", str(res.content, 'UTF-8'))
+            self._registered = True  # 设置注册成功标志位
+        else:
+            self.logger.error(f"Failed to register instance: {res.status_code} - {res.text}")
+
     def send_heartbeat(self):
         try:
-            res = requests.put(url=self.SERVER_ADDRESSES + "/nacos/v1/ns/instance/beat",
+            res = requests.put(url=f"http://{self.SERVER_ADDRESSES}/nacos/v1/ns/instance/beat",
                                data={
                                    "ip": self.LOCAL_IP,
                                    "port": "3333",
                                    "namespaceId": self.NAMESPACE,
                                    "serviceName": self.GROUP + "@@" + self.DATA_ID,
-                                   # "groupName":self.GROUP,
                                    "clusterName": "DEFAULT"}
-                               ).json()
-            if res["code"] == 20404:  ### 找不到资源重新注册
-                self.register_instance()
-                # continue
-            # time.sleep(4)
-            t = Timer(4, self.send_heartbeat)  ## 2秒执行一次
+                               )
+            if res.status_code == 200:
+                res_json = res.json()
+                if res_json["code"] == 20404:  ### 找不到资源重新注册
+                    self.register_instance()
+            else:
+                self.logger.error(f"Failed to send heartbeat: {res.status_code} - {res.text}")
+            t = Timer(4, self.send_heartbeat)  ## 4秒执行一次
             t.start()
         except Exception as e:
-            print(e)
+            self.logger.error(f"send_heartbeat error: {e}")
 
     def getServer(self, serverName):
-        res = requests.get(url=self.SERVER_ADDRESSES + "/nacos/v1/ns/instance/list",
-                           params={'namespaceId': self.NAMESPACE, 'serviceName': self.GROUP + "@@" + serverName})
-        hosts = res.json()["hosts"]
-        if len(hosts) > 0:
-            return hosts[0]
+        try:
+            res = requests.get(url=f"http://{self.SERVER_ADDRESSES}/nacos/v1/ns/instance/list",
+                               params={'namespaceId': self.NAMESPACE, 'serviceName': self.GROUP + "@@" + serverName})
+            if res.status_code == 200:
+                hosts = res.json()["hosts"]
+                if len(hosts) > 0:
+                    return hosts[0]
+            else:
+                self.logger.error(f"Failed to get server list: {res.status_code} - {res.text}")
+        except Exception as e:
+            self.logger.error(f"getServer error: {e}")
         return None
 
     def start(self):
         try:
-            self.logger.info("启动参数: %s", {
-                "IP": self.LOCAL_IP,
-                "SERVER_ADDRESSES": self.SERVER_ADDRESSES,
-                "NAMESPACE": self.NAMESPACE,
-                "DATA_ID": self.DATA_ID,
-                "nacosGroup": self.GROUP}
-                             )
             self.CLIENT = nacos.NacosClient(self.SERVER_ADDRESSES, namespace=self.NAMESPACE)
             self.register_instance()
             self.send_heartbeat()
         except Exception as e:
-            print(e)
+            self.logger.error(f"start error: {e}")
 
     def get_nacos_configs(self):
-        url = self.SERVER_ADDRESSES + "/nacos/v1/cs/configs"
+        url = f"http://{self.SERVER_ADDRESSES}/nacos/v1/cs/configs"
         params = {
             'tenant': self.NAMESPACE,
             'dataId': self.DATA_ID,
             'group': self.GROUP
         }
-        r = requests.get(url, params)
-        r.encoding = r.apparent_encoding
-        r_dict = r.json()
-        return r_dict
+        try:
+            r = requests.get(url, params)
+            r.encoding = r.apparent_encoding
+            if r.status_code == 200:
+                r_dict = r.json()
+                return r_dict
+            else:
+                self.logger.error(f"Failed to get Nacos configs: {r.status_code} - {r.text}")
+        except Exception as e:
+            self.logger.error(f"get_nacos_configs error: {e}")
+        return None
 
 
-nacos_service_single = nacos_service()
+nacos_service_single = NacosService()
 
 
 # 发送url请求,获取nacos上的配置
 def get_nacos_configs():
-    url = nacos_service_single.SERVER_ADDRESSES + "/nacos/v1/cs/configs"
-    params = {
-        'tenant': nacos_service_single.NAMESPACE,
-        'dataId': nacos_service_single.DATA_ID,
-        'group': nacos_service_single.GROUP
-    }
-    r = requests.get(url, params)
-    r.encoding = r.apparent_encoding
-    r_dict = r.json()
-    return r_dict
-
+    return nacos_service_single.get_nacos_configs()