refactor: unify message ingress forwarding

This commit is contained in:
jxxghp
2026-08-24 03:01:17 +08:00
parent e274672a6a
commit e1230c0277
16 changed files with 463 additions and 127 deletions
+115
View File
@@ -0,0 +1,115 @@
"""消息渠道回环进入宿主消息 API 的统一适配边界。"""
from collections.abc import Callable, Mapping
from typing import Any
from urllib.parse import urlencode
from app.adapters.network.http import AsyncRequestUtils, RequestUtils
from app.runtime.log import logger
from app.runtime.settings import RuntimeSettingsCompat
settings = RuntimeSettingsCompat()
BackgroundSubmitter = Callable[..., object]
def build_message_ingress_url(source: str | None) -> str:
"""按当前运行配置构造安全编码的本地消息入口 URL。"""
query = {"token": settings.API_TOKEN}
if source:
query["source"] = source
return f"http://127.0.0.1:{settings.PORT}/api/v1/message?{urlencode(query)}"
def forward_message_to_host(
payload: Mapping[str, Any],
source: str | None,
*,
timeout: float = 15,
) -> bool:
"""同步转发渠道 payload,统一判断本地入口是否确认接收。"""
response = None
try:
response = RequestUtils(timeout=timeout).post_res(
build_message_ingress_url(source),
json=dict(payload),
)
if response is None:
logger.error(f"转发渠道消息到本地入口失败:source={source or '-'} - 无响应")
return False
if response.status_code >= 400:
logger.error(
"转发渠道消息到本地入口失败:"
f"source={source or '-'} - HTTP {response.status_code}"
)
return False
return True
except Exception as error:
logger.error(f"转发渠道消息到本地入口失败:source={source or '-'} - {error}")
return False
finally:
close = getattr(response, "close", None)
if callable(close):
try:
close()
except Exception as error:
logger.debug(
f"释放本地消息入口响应失败:source={source or '-'} - {error}"
)
async def async_forward_message_to_host(
payload: Mapping[str, Any],
source: str | None,
*,
timeout: float = 15,
) -> bool:
"""异步转发渠道 payload,供自有事件循环的消息 SDK 复用同一确认语义。"""
response = None
try:
response = await AsyncRequestUtils(timeout=timeout).post_res(
build_message_ingress_url(source),
json=dict(payload),
)
if response is None:
logger.error(f"转发渠道消息到本地入口失败:source={source or '-'} - 无响应")
return False
if response.status_code >= 400:
logger.error(
"转发渠道消息到本地入口失败:"
f"source={source or '-'} - HTTP {response.status_code}"
)
return False
return True
except Exception as error:
logger.error(f"转发渠道消息到本地入口失败:source={source or '-'} - {error}")
return False
finally:
if response is not None:
try:
await response.aclose()
except Exception as error:
logger.debug(
f"释放本地消息入口响应失败:source={source or '-'} - {error}"
)
def submit_message_to_host(
payload: Mapping[str, Any],
source: str | None,
*,
submit: BackgroundSubmitter,
timeout: float = 15,
) -> bool:
"""把同步回环转发提交给调用方注入的受管后台执行器。"""
try:
submit(
forward_message_to_host,
dict(payload),
source,
timeout=timeout,
)
except Exception as error:
logger.error(f"提交渠道消息转发任务失败:source={source or '-'} - {error}")
return False
return True