mengqiankang 1 ay önce
ebeveyn
işleme
3f20d23902
2 değiştirilmiş dosya ile 24 ekleme ve 4 silme
  1. 22 2
      alien_gateway/config.py
  2. 2 2
      alien_util/celery_app.py

+ 22 - 2
alien_gateway/config.py

@@ -1,6 +1,7 @@
 from pydantic_settings import BaseSettings, SettingsConfigDict
 from typing import Any, Dict, List
 from dotenv import load_dotenv
+from urllib.parse import quote
 import os
 load_dotenv()
 
@@ -70,9 +71,28 @@ class Settings(BaseSettings):
 
     @property
     def REDIS_SENTINEL_URL(self) -> str:
-        # Celery sentinel transport 需要 "sentinel://host:port;sentinel://host:port"
+        # 标准 Sentinel URL:
+        # redis+sentinel://[username[:password]@]host1:port1,host2:port2/db?sentinel_master=mymaster
+        if self.REDIS_SENTINEL_USERNAME:
+            user = quote(self.REDIS_SENTINEL_USERNAME, safe="")
+            pwd = quote(self.REDIS_PASSWORD, safe="")
+            auth = f"{user}:{pwd}@"
+        elif self.REDIS_PASSWORD:
+            pwd = quote(self.REDIS_PASSWORD, safe="")
+            auth = f":{pwd}@"
+        else:
+            auth = ""
+        hosts = ",".join(f"{host}:{port}" for host, port in self.REDIS_SENTINEL_NODES)
+        master = quote(self.REDIS_MASTER_NAME, safe="")
+        return f"redis+sentinel://{auth}{hosts}/{self.REDIS_DB}?sentinel_master={master}"
+
+    @property
+    def REDIS_CELERY_SENTINEL_URL(self) -> str:
+        # Celery/Kombu 兼容的 Sentinel URL:
+        # sentinel://host:port/db;sentinel://host:port/db
         return ";".join(
-            f"sentinel://{host}:{port}" for host, port in self.REDIS_SENTINEL_NODES
+            f"sentinel://{host}:{port}/{self.REDIS_DB}"
+            for host, port in self.REDIS_SENTINEL_NODES
         )
 
     @property

+ 2 - 2
alien_util/celery_app.py

@@ -5,8 +5,8 @@ from alien_gateway.config import settings
 # 创建 Celery 应用
 celery_app = Celery(
     "alien_cloud",
-    broker=settings.REDIS_SENTINEL_URL,
-    backend=settings.REDIS_SENTINEL_URL,
+    broker="redis+sentinel://192.168.2.251:36379,192.168.2.252:36379,192.168.2.253:36379/0?service_name=mymaster",
+    backend="redis+sentinel://192.168.2.251:36379,192.168.2.252:36379,192.168.2.253:36379/0?service_name=mymaster",
     include=["alien_util.tasks.contract_tasks"]
 )