sycommon-python-lib 0.1.20__tar.gz → 0.1.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sycommon-python-lib might be problematic. Click here for more details.
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/PKG-INFO +1 -1
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/pyproject.toml +1 -1
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/middleware.py +1 -1
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/rabbitmq/rabbitmq_client.py +9 -2
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/rabbitmq/rabbitmq_service.py +34 -12
- sycommon_python_lib-0.1.22/src/sycommon/tools/snowflake.py +33 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
- sycommon_python_lib-0.1.20/src/sycommon/tools/snowflake.py +0 -11
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/README.md +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/setup.cfg +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/command/cli.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/Config.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/DatabaseConfig.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/EmbeddingConfig.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/LLMConfig.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/MQConfig.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/RerankerConfig.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/database/base_db_service.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/database/database_service.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/health/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/health/health_check.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/health/metrics.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/health/ping.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/logging/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/logging/kafka_log.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/logging/logger_wrapper.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/context.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/cors.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/docs.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/exception.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/monitor_memory.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/mq.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/timeout.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/traceid.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/base_http.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/log.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/mqlistener_config.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/mqmsg_model.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/mqsend_config.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/sso_user.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/services.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/sse/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/sse/event.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/sse/sse.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/synacos/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/synacos/feign.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/synacos/nacos_service.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/tools/__init__.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/tools/docs.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/tools/timing.py +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
- {sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/middleware.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from sycommon.health.metrics import setup_metrics_handler
|
|
2
2
|
from sycommon.health.ping import setup_ping_handler
|
|
3
3
|
from sycommon.middleware.cors import setup_cors_handler
|
|
4
4
|
from sycommon.middleware.docs import setup_docs_handler
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/rabbitmq/rabbitmq_client.py
RENAMED
|
@@ -517,7 +517,9 @@ class RabbitMQClient:
|
|
|
517
517
|
logger.debug("已经在消费中,返回现有consumer_tag")
|
|
518
518
|
if self._consumer_tag:
|
|
519
519
|
return self._consumer_tag
|
|
520
|
-
|
|
520
|
+
# 如果_is_consuming为True但无consumer_tag,重置状态并重新启动
|
|
521
|
+
logger.warning("检测到消费状态异常(无consumer_tag),重置状态后重试")
|
|
522
|
+
self._is_consuming = False # 重置状态
|
|
521
523
|
|
|
522
524
|
if not self.is_connected:
|
|
523
525
|
await self.connect()
|
|
@@ -532,16 +534,21 @@ class RabbitMQClient:
|
|
|
532
534
|
logger.info(f"开始消费队列: {self.actual_queue_name}")
|
|
533
535
|
|
|
534
536
|
try:
|
|
537
|
+
# 调用队列的consume方法,确保获取到consumer_tag
|
|
535
538
|
self._consumer_tag = await self.queue.consume(
|
|
536
539
|
self._message_wrapper,
|
|
537
540
|
no_ack=False # 手动确认消息
|
|
538
541
|
)
|
|
539
542
|
|
|
543
|
+
# 确保consumer_tag有效
|
|
544
|
+
if not self._consumer_tag:
|
|
545
|
+
raise Exception("未能获取到有效的consumer_tag")
|
|
546
|
+
|
|
540
547
|
logger.info(
|
|
541
548
|
f"消费者已启动,队列: {self.actual_queue_name}, tag: {self._consumer_tag}")
|
|
542
549
|
return self._consumer_tag
|
|
543
550
|
except Exception as e:
|
|
544
|
-
self._is_consuming = False
|
|
551
|
+
self._is_consuming = False # 异常时重置状态
|
|
545
552
|
logger.error(f"启动消费失败: {str(e)}", exc_info=True)
|
|
546
553
|
raise
|
|
547
554
|
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/rabbitmq/rabbitmq_service.py
RENAMED
|
@@ -97,10 +97,10 @@ class RabbitMQService:
|
|
|
97
97
|
password=cls._config.get('password', ""),
|
|
98
98
|
virtualhost=cls._config.get('virtual-host', "/"),
|
|
99
99
|
connection_pool_size=cls._config.get(
|
|
100
|
-
'connection_pool_size',
|
|
100
|
+
'connection_pool_size', 5), # 连接池大小
|
|
101
101
|
channel_pool_size=cls._config.get(
|
|
102
102
|
'channel_pool_size', 10), # 通道池大小
|
|
103
|
-
heartbeat=cls._config.get('heartbeat',
|
|
103
|
+
heartbeat=cls._config.get('heartbeat', 30),
|
|
104
104
|
app_name=cls._config.get("APP_NAME", "")
|
|
105
105
|
)
|
|
106
106
|
|
|
@@ -116,9 +116,6 @@ class RabbitMQService:
|
|
|
116
116
|
|
|
117
117
|
@classmethod
|
|
118
118
|
async def _create_client(cls, queue_name: str, **kwargs) -> RabbitMQClient:
|
|
119
|
-
"""
|
|
120
|
-
创建RabbitMQ客户端实例(基于连接池)
|
|
121
|
-
"""
|
|
122
119
|
if not cls._connection_pool:
|
|
123
120
|
# 等待连接池初始化
|
|
124
121
|
start_time = asyncio.get_event_loop().time()
|
|
@@ -150,8 +147,9 @@ class RabbitMQService:
|
|
|
150
147
|
f"允许创建: {create_if_not_exists}"
|
|
151
148
|
)
|
|
152
149
|
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
# 创建客户端实例
|
|
151
|
+
client = RabbitMQClient(
|
|
152
|
+
connection_pool=cls._connection_pool,
|
|
155
153
|
exchange_name=cls._config.get(
|
|
156
154
|
'exchange_name', "system.topic.exchange"),
|
|
157
155
|
exchange_type=kwargs.get('exchange_type', "topic"),
|
|
@@ -172,6 +170,10 @@ class RabbitMQService:
|
|
|
172
170
|
'consumption_stall_threshold', 10)
|
|
173
171
|
)
|
|
174
172
|
|
|
173
|
+
# 使用declare_queue控制是否声明队列(发送器不声明,监听器声明)
|
|
174
|
+
await client.connect(declare_queue=not is_sender)
|
|
175
|
+
return client
|
|
176
|
+
|
|
175
177
|
@classmethod
|
|
176
178
|
async def get_client(
|
|
177
179
|
cls,
|
|
@@ -572,11 +574,31 @@ class RabbitMQService:
|
|
|
572
574
|
# 确保连接有效
|
|
573
575
|
if not sender.is_connected:
|
|
574
576
|
logger.info(f"发送器 '{queue_name}' 连接已关闭,尝试重新连接")
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
577
|
+
max_retry = 3 # 最大重试次数
|
|
578
|
+
retry_count = 0
|
|
579
|
+
last_exception = None
|
|
580
|
+
|
|
581
|
+
while retry_count < max_retry:
|
|
582
|
+
try:
|
|
583
|
+
# 尝试重连,每次重试间隔1秒
|
|
584
|
+
await sender.connect(force_reconnect=True, declare_queue=False)
|
|
585
|
+
logger.info(
|
|
586
|
+
f"发送器 '{queue_name}' 第 {retry_count + 1} 次重连成功")
|
|
587
|
+
break # 重连成功则退出循环
|
|
588
|
+
except Exception as e:
|
|
589
|
+
last_exception = e
|
|
590
|
+
retry_count += 1
|
|
591
|
+
logger.warning(
|
|
592
|
+
f"发送器 '{queue_name}' 第 {retry_count} 次重连失败: {str(e)}"
|
|
593
|
+
)
|
|
594
|
+
if retry_count < max_retry:
|
|
595
|
+
await asyncio.sleep(1) # 重试前等待1秒
|
|
596
|
+
|
|
597
|
+
# 所有重试都失败则抛出异常
|
|
598
|
+
if retry_count >= max_retry and not sender.is_connected:
|
|
599
|
+
error_msg = f"发送器 '{queue_name}' 经过 {max_retry} 次重连仍失败"
|
|
600
|
+
logger.error(f"{error_msg}: {str(last_exception)}")
|
|
601
|
+
raise Exception(error_msg) from last_exception
|
|
580
602
|
|
|
581
603
|
try:
|
|
582
604
|
# 处理消息数据
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Snowflake:
|
|
5
|
+
"""基于UUID生成兼容Java long类型的唯一ID"""
|
|
6
|
+
_MAX_JAVA_LONG = 9223372036854775807 # Java long最大值(18位)
|
|
7
|
+
|
|
8
|
+
@staticmethod
|
|
9
|
+
def next_id() -> str:
|
|
10
|
+
"""生成不超过Java long最大值的唯一ID字符串(18位以内)"""
|
|
11
|
+
while True:
|
|
12
|
+
# 生成UUID并转换为整数
|
|
13
|
+
uuid_int = int(uuid.uuid4().hex, 16)
|
|
14
|
+
|
|
15
|
+
# 取低63位,并强制限制不超过Java long最大值
|
|
16
|
+
id_num = uuid_int & ((1 << 63) - 1) # 取低63位
|
|
17
|
+
id_num = min(id_num, Snowflake._MAX_JAVA_LONG) # 强制限制最大值
|
|
18
|
+
|
|
19
|
+
# 转换为字符串并验证长度(确保18位以内)
|
|
20
|
+
id_str = str(id_num)
|
|
21
|
+
if len(id_str) <= 18:
|
|
22
|
+
return id_str
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# 使用示例
|
|
26
|
+
if __name__ == "__main__":
|
|
27
|
+
# 生成1000个ID并验证
|
|
28
|
+
for _ in range(1000):
|
|
29
|
+
id_str = Snowflake.next_id()
|
|
30
|
+
id_num = int(id_str)
|
|
31
|
+
print(f"ID: {id_str} (长度: {len(id_str)})")
|
|
32
|
+
assert len(id_str) <= 18, f"ID长度超过18位: {id_str}"
|
|
33
|
+
assert id_num <= Snowflake._MAX_JAVA_LONG, f"ID超过Java long最大值: {id_num}"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/DatabaseConfig.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/EmbeddingConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/config/RerankerConfig.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/database/base_db_service.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/database/database_service.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/health/health_check.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/logging/logger_wrapper.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/__init__.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/context.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/exception.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/monitor_memory.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/timeout.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/middleware/traceid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/mqlistener_config.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/mqmsg_model.py
RENAMED
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/models/mqsend_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/rabbitmq/rabbitmq_pool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sycommon_python_lib-0.1.20 → sycommon_python_lib-0.1.22}/src/sycommon/synacos/nacos_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|