Skip to content

Commit 485c44e

Browse files
authored
Fix(rabbitmq): Handle exchange and routing key based on cloud env for… (#667)
Fix(rabbitmq): Handle exchange and routing key based on cloud env for specific message types Refactor rabbitmq_publish_message to correctly handle exchange and routing key determination based on the presence of MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME environment variable and the message label. - Default exchange and routing key are used for most messages. - 'knowledgeBaseUpdate' messages always have an empty routing key. - If MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME is set, and the message label is 'taskStatus' or 'knowledgeBaseUpdate', the exchange is overridden with the environment variable's value, and the routing key is set to empty. This fixes the 'taskStatus' routing issue in cloud environments. - Logging for cloud-affected messages is now specific and separate from local 'knowledgeBaseUpdate' logging. Co-authored-by: [email protected] <>
1 parent 5f7505f commit 485c44e

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -283,18 +283,28 @@ def rabbitmq_publish_message(self, message: dict):
283283

284284
exchange_name = self.rabbitmq_exchange_name
285285
routing_key = self.rabbit_queue_name
286+
label = message.get("label")
286287

287-
if message.get("label") == "knowledgeBaseUpdate":
288-
kb_specific_exchange_name = os.getenv("MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME")
288+
# Special handling for knowledgeBaseUpdate in local environment: always empty routing key
289+
if label == "knowledgeBaseUpdate":
290+
routing_key = ""
289291

290-
if kb_specific_exchange_name:
291-
exchange_name = kb_specific_exchange_name
292-
293-
routing_key = "" # User specified empty routing key for KB updates
292+
# Cloud environment override: applies to specific message types if MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME is set
293+
env_exchange_name = os.getenv("MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME")
294+
if env_exchange_name and label in ["taskStatus", "knowledgeBaseUpdate"]:
295+
exchange_name = env_exchange_name
296+
routing_key = "" # Routing key is always empty in cloud environment for these types
294297

298+
# Specific diagnostic logging for messages affected by cloud environment settings
299+
logger.info(
300+
f"[DIAGNOSTIC] Publishing {label} message in Cloud Env. "
301+
f"Exchange: {exchange_name}, Routing Key: '{routing_key}'."
302+
)
303+
logger.info(f" - Message Content: {json.dumps(message, indent=2)}")
304+
elif label == "knowledgeBaseUpdate":
305+
# Original diagnostic logging for knowledgeBaseUpdate if NOT in cloud env
295306
logger.info(
296-
f"[DIAGNOSTIC] Publishing KB Update message. "
297-
f"ENV_EXCHANGE_NAME_USED: {kb_specific_exchange_name is not None}. "
307+
f"[DIAGNOSTIC] Publishing knowledgeBaseUpdate message (Local Env). "
298308
f"Current configured Exchange: {exchange_name}, Routing Key: '{routing_key}'."
299309
)
300310
logger.info(f" - Message Content: {json.dumps(message, indent=2)}")

0 commit comments

Comments
 (0)