sycommon-python-lib 0.1.35__tar.gz → 0.1.37__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.
Files changed (64) hide show
  1. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/rabbitmq/rabbitmq_client.py +44 -43
  4. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/feign.py +50 -22
  5. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/nacos_service.py +1 -1
  6. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  7. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/README.md +0 -0
  8. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/setup.cfg +0 -0
  9. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/command/cli.py +0 -0
  10. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/__init__.py +0 -0
  11. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/Config.py +0 -0
  12. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/DatabaseConfig.py +0 -0
  13. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/EmbeddingConfig.py +0 -0
  14. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/LLMConfig.py +0 -0
  15. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/MQConfig.py +0 -0
  16. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/RerankerConfig.py +0 -0
  17. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/config/__init__.py +0 -0
  18. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/database/base_db_service.py +0 -0
  19. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/database/database_service.py +0 -0
  20. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/health/__init__.py +0 -0
  21. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/health/health_check.py +0 -0
  22. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/health/metrics.py +0 -0
  23. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/health/ping.py +0 -0
  24. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/logging/__init__.py +0 -0
  25. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/logging/kafka_log.py +0 -0
  26. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/logging/logger_wrapper.py +0 -0
  27. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/logging/sql_logger.py +0 -0
  28. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/__init__.py +0 -0
  29. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/context.py +0 -0
  30. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/cors.py +0 -0
  31. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/docs.py +0 -0
  32. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/exception.py +0 -0
  33. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/middleware.py +0 -0
  34. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/monitor_memory.py +0 -0
  35. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/mq.py +0 -0
  36. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/timeout.py +0 -0
  37. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/middleware/traceid.py +0 -0
  38. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/__init__.py +0 -0
  39. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/base_http.py +0 -0
  40. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/log.py +0 -0
  41. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/mqlistener_config.py +0 -0
  42. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/mqmsg_model.py +0 -0
  43. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/mqsend_config.py +0 -0
  44. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/models/sso_user.py +0 -0
  45. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  46. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  47. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/services.py +0 -0
  48. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/sse/__init__.py +0 -0
  49. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/sse/event.py +0 -0
  50. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/sse/sse.py +0 -0
  51. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/__init__.py +0 -0
  52. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/example.py +0 -0
  53. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/example2.py +0 -0
  54. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/feign_client.py +0 -0
  55. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/synacos/param.py +0 -0
  56. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/tools/__init__.py +0 -0
  57. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/tools/docs.py +0 -0
  58. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/tools/snowflake.py +0 -0
  59. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon/tools/timing.py +0 -0
  60. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  61. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  62. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  63. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  64. {sycommon_python_lib-0.1.35 → sycommon_python_lib-0.1.37}/src/sycommon_python_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.35
3
+ Version: 0.1.37
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.1.35"
3
+ version = "0.1.37"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -1,3 +1,7 @@
1
+ from aio_pika.pool import Pool
2
+ from aio_pika.abc import AbstractRobustConnection
3
+ from aio_pika import connect_robust, Channel
4
+ from typing import Optional, List
1
5
  import asyncio
2
6
  import json
3
7
  from typing import Callable, Coroutine, Optional, Dict, Any, Union, Set
@@ -81,9 +85,8 @@ class RabbitMQClient:
81
85
  self._exchange_exists = False # 由 _connection_lock 保护
82
86
  self._queue_exists = False # 由 _connection_lock 保护
83
87
  self._queue_bound = False # 由 _connection_lock 保护
84
- self._is_consuming = False # 由 _consume_state_lock 保护
85
88
  self._closed = False # 由 _connection_lock 保护
86
- # 由 _consume_state_lock 保护
89
+ # 由 _consume_state_lock 保护:通过 consumer_tag 存在性判断是否在消费
87
90
  self._consumer_tag: Optional[ConsumerTag] = None
88
91
  self._last_activity_timestamp = asyncio.get_event_loop().time()
89
92
  self._last_message_processed = asyncio.get_event_loop().time()
@@ -102,7 +105,7 @@ class RabbitMQClient:
102
105
  self._tracking_messages: Dict[str, Dict[str, Any]] = {}
103
106
 
104
107
  # 细粒度锁(核心设计:按资源类型拆分,避免嵌套)
105
- # 保护消费状态(_is_consuming、message_handler、_consumer_tag)
108
+ # 保护消费状态(message_handler、_consumer_tag)
106
109
  self._consume_state_lock = asyncio.Lock()
107
110
  self._tracking_lock = asyncio.Lock() # 保护消息跟踪记录(_tracking_messages)
108
111
  # 保护连接/资源状态(channel、exchange、queue、_closed等)
@@ -131,17 +134,19 @@ class RabbitMQClient:
131
134
  async def _get_consume_state(self) -> tuple[bool, Optional[Callable], Optional[ConsumerTag]]:
132
135
  """安全获取消费相关状态(一次性获取,避免多次加锁)"""
133
136
  async with self._consume_state_lock:
134
- return self._is_consuming, self.message_handler, self._consumer_tag
137
+ # 通过 _consumer_tag 是否存在判断是否在消费
138
+ is_consuming = self._consumer_tag is not None
139
+ return is_consuming, self.message_handler, self._consumer_tag
135
140
 
136
- async def _set_consume_state(self, is_consuming: bool, consumer_tag: Optional[ConsumerTag] = None):
137
- """安全更新消费状态(原子操作)"""
141
+ async def _set_consumer_tag(self, consumer_tag: Optional[ConsumerTag] = None):
142
+ """安全更新消费者标签(替代原 _set_consume_state)"""
138
143
  async with self._consume_state_lock:
139
- old_is_consuming = self._is_consuming
140
- self._is_consuming = is_consuming
141
- if consumer_tag is not None:
142
- self._consumer_tag = consumer_tag
143
- if old_is_consuming != is_consuming:
144
- logger.info(f"消费状态变更: {old_is_consuming} → {is_consuming}")
144
+ old_tag = self._consumer_tag
145
+ self._consumer_tag = consumer_tag
146
+ old_is_consuming = old_tag is not None
147
+ new_is_consuming = consumer_tag is not None
148
+ if old_is_consuming != new_is_consuming:
149
+ logger.info(f"消费状态变更: {old_is_consuming} → {new_is_consuming}")
145
150
 
146
151
  async def set_message_handler(self, handler):
147
152
  """设置消息处理器(加锁保护,避免并发修改)"""
@@ -332,7 +337,7 @@ class RabbitMQClient:
332
337
  # 重置连接状态和跟踪记录
333
338
  await self._reset_connection_state()
334
339
  await self._clear_tracking_messages()
335
- await self._set_consume_state(is_consuming=False)
340
+ await self._set_consumer_tag(None) # 重置消费者标签(停止消费)
336
341
 
337
342
  retries = 0
338
343
  last_exception = None
@@ -401,9 +406,9 @@ class RabbitMQClient:
401
406
  if not await self.is_connected:
402
407
  raise Exception("连接验证失败,状态异常")
403
408
 
404
- # 重新开始消费(如果已设置处理器)
405
- is_consuming, handler, _ = await self._get_consume_state()
406
- if handler:
409
+ # 重新开始消费(如果已设置处理器且之前在消费)
410
+ _, handler, consumer_tag = await self._get_consume_state()
411
+ if handler and consumer_tag: # 有处理器且之前有消费标签,说明需要恢复消费
407
412
  await self.start_consuming()
408
413
 
409
414
  # 启动监控和保活任务
@@ -447,9 +452,9 @@ class RabbitMQClient:
447
452
  if cleaned_count > 0:
448
453
  logger.info(f"清理了 {cleaned_count} 条已确认消息记录")
449
454
 
450
- # 检查消费停滞(仅当消费状态为True时)
451
- is_consuming, _, _ = await self._get_consume_state()
452
- if is_consuming:
455
+ # 检查消费停滞(仅当有消费者标签时)
456
+ _, handler, consumer_tag = await self._get_consume_state()
457
+ if consumer_tag: # 有消费标签说明正在消费
453
458
  tracking_count = await self._get_tracking_count()
454
459
  if current_time - self._last_message_processed > self.consumption_stall_threshold:
455
460
  if tracking_count > 0:
@@ -469,7 +474,7 @@ class RabbitMQClient:
469
474
  except Exception as e:
470
475
  logger.error(
471
476
  f"重启消费失败: {str(e)}", exc_info=True)
472
- await self._set_consume_state(is_consuming=False)
477
+ await self._set_consumer_tag(None)
473
478
 
474
479
  except Exception as e:
475
480
  logger.error(f"监控任务出错: {str(e)}", exc_info=True)
@@ -482,7 +487,7 @@ class RabbitMQClient:
482
487
  async def _recreate_channel(self) -> None:
483
488
  """重建通道并恢复资源(无锁嵌套)"""
484
489
  # 先停止消费
485
- await self._set_consume_state(is_consuming=False)
490
+ await self._set_consumer_tag(None)
486
491
  logger.info("开始重建通道...")
487
492
 
488
493
  try:
@@ -505,7 +510,7 @@ class RabbitMQClient:
505
510
  # 更新连接资源
506
511
  await self._update_connection_resources(channel, exchange, queue)
507
512
 
508
- # 重新开始消费
513
+ # 重新开始消费(如果有处理器)
509
514
  _, handler, _ = await self._get_consume_state()
510
515
  if handler:
511
516
  await self.start_consuming()
@@ -516,7 +521,7 @@ class RabbitMQClient:
516
521
  self._update_activity_timestamp()
517
522
  except Exception as e:
518
523
  logger.error(f"通道重建失败: {str(e)},触发重连", exc_info=True)
519
- await self._set_consume_state(is_consuming=False)
524
+ await self._set_consumer_tag(None)
520
525
  await self.connect(force_reconnect=True)
521
526
 
522
527
  def _start_keepalive(self) -> None:
@@ -706,11 +711,11 @@ class RabbitMQClient:
706
711
  await self.connect()
707
712
 
708
713
  # 获取消费状态和资源
709
- is_consuming, handler, consumer_tag = await self._get_consume_state()
714
+ _, handler, consumer_tag = await self._get_consume_state()
710
715
  channel, exchange, queue = await self._get_connection_resources()
711
716
 
712
- # 检查是否已在消费
713
- if is_consuming and consumer_tag:
717
+ # 检查是否已在消费(通过 consumer_tag 是否存在判断)
718
+ if consumer_tag:
714
719
  logger.info(f"已经在消费中,返回现有consumer_tag: {consumer_tag}")
715
720
  return consumer_tag
716
721
 
@@ -732,31 +737,31 @@ class RabbitMQClient:
732
737
  if not new_consumer_tag:
733
738
  raise Exception("未能获取到有效的consumer_tag")
734
739
 
735
- # 更新消费状态
736
- await self._set_consume_state(is_consuming=True, consumer_tag=new_consumer_tag)
740
+ # 更新消费状态(设置消费者标签)
741
+ await self._set_consumer_tag(new_consumer_tag)
737
742
  logger.info(
738
743
  f"消费者已启动,队列: {queue.name}, tag: {new_consumer_tag}")
739
744
  return new_consumer_tag
740
745
  except Exception as e:
741
746
  # 异常时回滚状态
742
- await self._set_consume_state(is_consuming=False)
747
+ await self._set_consumer_tag(None)
743
748
  logger.error(f"启动消费失败: {str(e)}", exc_info=True)
744
749
  raise
745
750
 
746
751
  async def stop_consuming(self) -> None:
747
752
  """停止消费(无锁嵌套,通过原子方法获取/更新状态)"""
748
753
  # 获取消费状态和资源
749
- is_consuming, _, consumer_tag = await self._get_consume_state()
754
+ _, _, consumer_tag = await self._get_consume_state()
750
755
  _, _, queue = await self._get_connection_resources()
751
756
 
752
- if not is_consuming:
757
+ if not consumer_tag: # 无消费标签说明未在消费
753
758
  logger.info("未处于消费状态,无需停止")
754
759
  return
755
760
 
756
761
  logger.info(f"开始停止消费(consumer_tag: {consumer_tag})")
757
762
 
758
- # 先更新消费状态为False
759
- await self._set_consume_state(is_consuming=False)
763
+ # 先清除消费标签
764
+ await self._set_consumer_tag(None)
760
765
 
761
766
  # 取消消费者
762
767
  if consumer_tag and queue and not await self._is_closed():
@@ -781,10 +786,6 @@ class RabbitMQClient:
781
786
  break
782
787
  await asyncio.sleep(1)
783
788
 
784
- # 清理消费状态
785
- async with self._consume_state_lock:
786
- self._consumer_tag = None
787
-
788
789
  logger.info(f"已停止消费队列: {queue.name if queue else '未知'}")
789
790
 
790
791
  async def _parse_message(self, message: AbstractIncomingMessage) -> Union[Dict[str, Any], str]:
@@ -911,21 +912,21 @@ class RabbitMQClient:
911
912
 
912
913
  # 重试检查消费状态(处理极端并发场景)
913
914
  for attempt in range(max_check_attempts):
914
- is_consuming, handler, _ = await self._get_consume_state()
915
- if is_consuming and handler:
915
+ _, handler, consumer_tag = await self._get_consume_state()
916
+ if consumer_tag and handler: # 有消费标签且有处理器才继续
916
917
  break
917
918
  if attempt < max_check_attempts - 1:
918
919
  logger.debug(
919
920
  f"消息 {message_id} 处理状态检查重试(第{attempt+1}次): "
920
921
  f"handler={'存在' if handler else '不存在'}, "
921
- f"is_consuming={is_consuming}"
922
+ f"consumer_tag={'存在' if consumer_tag else '不存在'}"
922
923
  )
923
924
  await asyncio.sleep(check_interval)
924
925
 
925
926
  # 最终状态判断:状态异常则拒绝消息
926
- is_consuming, handler, _ = await self._get_consume_state()
927
- if not is_consuming or not handler:
928
- err_msg = f"消息 {message_id} 拒绝处理:handler={'存在' if handler else '不存在'}, is_consuming={is_consuming}"
927
+ _, handler, consumer_tag = await self._get_consume_state()
928
+ if not consumer_tag or not handler:
929
+ err_msg = f"消息 {message_id} 拒绝处理:handler={'存在' if handler else '不存在'}, consumer_tag={'存在' if consumer_tag else '不存在'}"
929
930
  logger.warning(err_msg)
930
931
  try:
931
932
  await self._handle_business_retry(message, Exception(err_msg), drop=False)
@@ -123,28 +123,56 @@ async def feign(service_name, api_path, method='GET', params=None, headers=None,
123
123
 
124
124
 
125
125
  async def _handle_feign_response(response):
126
- """处理Feign请求的响应,统一返回格式"""
126
+ """
127
+ 处理Feign请求的响应,统一返回格式
128
+ 调整逻辑:先判断状态码,再处理内容
129
+ - 200状态:优先识别JSON/文本,其他均按文件流(二进制)处理
130
+ - 非200状态:统一返回错误字典
131
+ """
127
132
  try:
128
- content_type = response.headers.get('Content-Type', '')
129
- if 'application/json' in content_type:
130
- response_body = await response.json()
133
+ status_code = response.status
134
+ content_type = response.headers.get('Content-Type', '').lower()
135
+ response_body = None
136
+
137
+ if status_code == 200:
138
+ if 'application/json' in content_type:
139
+ response_body = await response.json()
140
+ elif 'text/' in content_type:
141
+ # 文本类型(text/plain、text/html等):按文本读取
142
+ try:
143
+ response_body = await response.text(encoding='utf-8')
144
+ except UnicodeDecodeError:
145
+ # 兼容中文编码(gbk)
146
+ response_body = await response.text(encoding='gbk')
147
+ else:
148
+ # 其他类型(PDF、图片、octet-stream等):按文件流(二进制)读取
149
+ binary_data = await response.read()
150
+ SYLogger.info(
151
+ f"按文件流处理响应,类型:{content_type},大小:{len(binary_data)/1024:.2f}KB")
152
+ return io.BytesIO(binary_data) # 返回BytesIO,支持read()
153
+ return response_body
131
154
  else:
132
- response_body = await response.text()
155
+ # 非200状态:统一读取响应体(兼容文本/二进制错误信息)
156
+ try:
157
+ if 'application/json' in content_type:
158
+ response_body = await response.json()
159
+ else:
160
+ response_body = await response.text(encoding='utf-8', errors='ignore')
161
+ except Exception:
162
+ binary_data = await response.read()
163
+ response_body = f"非200状态,响应无法解码:{binary_data[:100].hex()}"
164
+
165
+ error_msg = f"请求失败,状态码: {status_code},响应内容: {str(response_body)[:500]}"
166
+ SYLogger.error(error_msg)
167
+ return {
168
+ "success": False,
169
+ "code": status_code,
170
+ "message": error_msg,
171
+ "data": response_body
172
+ }
173
+
133
174
  except Exception as e:
134
- response_body = f"读取响应体失败: {str(e)}"
135
- SYLogger.error(f"nacos:处理响应时出错: {response_body}")
136
-
137
- if response.status == 200:
138
- if 'application/octet-stream' in content_type:
139
- return io.BytesIO(await response.read()) # 重新读取二进制内容
140
- return response_body
141
- else:
142
- # 失败:返回统一错误字典,包含状态码、响应体
143
- error_msg = f"请求失败,状态码: {response.status},响应内容: {response_body}"
144
- SYLogger.error(error_msg)
145
- return {
146
- "success": False,
147
- "code": response.status,
148
- "message": error_msg,
149
- "data": response_body
150
- }
175
+ import traceback
176
+ error_detail = f"处理响应异常: {str(e)}\n{traceback.format_exc()}"
177
+ SYLogger.error(f"nacos:处理响应时出错: {error_detail}")
178
+ return None
@@ -47,7 +47,7 @@ class NacosService(metaclass=SingletonMeta):
47
47
  self.retry_backoff = self.nacos_config.get('retryBackoff', 1.5)
48
48
  self.max_retry_delay = self.nacos_config.get('maxRetryDelay', 30)
49
49
  self.heartbeat_interval = self.nacos_config.get(
50
- 'heartbeatInterval', 10)
50
+ 'heartbeatInterval', 15)
51
51
  self.register_retry_interval = self.nacos_config.get(
52
52
  'registerRetryInterval', 5) # 注册重试间隔
53
53
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.35
3
+ Version: 0.1.37
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown