sycommon-python-lib 0.1.57b3__tar.gz → 0.1.57b4__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 (94) hide show
  1. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/PKG-INFO +1 -1
  2. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/pyproject.toml +1 -1
  3. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_client.py +43 -23
  4. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon_python_lib.egg-info/PKG-INFO +1 -1
  5. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/README.md +0 -0
  6. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/setup.cfg +0 -0
  7. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/command/cli.py +0 -0
  8. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/__init__.py +0 -0
  9. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/Config.py +0 -0
  10. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/DatabaseConfig.py +0 -0
  11. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/EmbeddingConfig.py +0 -0
  12. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/LLMConfig.py +0 -0
  13. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/LangfuseConfig.py +0 -0
  14. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/MQConfig.py +0 -0
  15. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/RerankerConfig.py +0 -0
  16. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/SentryConfig.py +0 -0
  17. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/config/__init__.py +0 -0
  18. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/database/async_base_db_service.py +0 -0
  19. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/database/async_database_service.py +0 -0
  20. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/database/base_db_service.py +0 -0
  21. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/database/database_service.py +0 -0
  22. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/health/__init__.py +0 -0
  23. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/health/health_check.py +0 -0
  24. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/health/metrics.py +0 -0
  25. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/health/ping.py +0 -0
  26. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/__init__.py +0 -0
  27. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/embedding.py +0 -0
  28. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/get_llm.py +0 -0
  29. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/llm_logger.py +0 -0
  30. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/llm_tokens.py +0 -0
  31. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/struct_token.py +0 -0
  32. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/sy_langfuse.py +0 -0
  33. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/llm/usage_token.py +0 -0
  34. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/logging/__init__.py +0 -0
  35. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/logging/async_sql_logger.py +0 -0
  36. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/logging/kafka_log.py +0 -0
  37. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/logging/logger_levels.py +0 -0
  38. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/logging/logger_wrapper.py +0 -0
  39. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/logging/sql_logger.py +0 -0
  40. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/__init__.py +0 -0
  41. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/context.py +0 -0
  42. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/cors.py +0 -0
  43. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/docs.py +0 -0
  44. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/exception.py +0 -0
  45. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/middleware.py +0 -0
  46. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/monitor_memory.py +0 -0
  47. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/mq.py +0 -0
  48. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/timeout.py +0 -0
  49. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/middleware/traceid.py +0 -0
  50. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/__init__.py +0 -0
  51. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/base_http.py +0 -0
  52. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/log.py +0 -0
  53. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/mqlistener_config.py +0 -0
  54. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/mqmsg_model.py +0 -0
  55. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/mqsend_config.py +0 -0
  56. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/models/sso_user.py +0 -0
  57. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/notice/__init__.py +0 -0
  58. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/notice/uvicorn_monitor.py +0 -0
  59. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_pool.py +0 -0
  60. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_service.py +0 -0
  61. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_service_client_manager.py +0 -0
  62. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_service_connection_monitor.py +0 -0
  63. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_service_consumer_manager.py +0 -0
  64. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_service_core.py +0 -0
  65. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/rabbitmq/rabbitmq_service_producer_manager.py +0 -0
  66. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/sentry/__init__.py +0 -0
  67. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/sentry/sy_sentry.py +0 -0
  68. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/services.py +0 -0
  69. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/sse/__init__.py +0 -0
  70. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/sse/event.py +0 -0
  71. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/sse/sse.py +0 -0
  72. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/__init__.py +0 -0
  73. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/example.py +0 -0
  74. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/example2.py +0 -0
  75. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/feign.py +0 -0
  76. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/feign_client.py +0 -0
  77. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/nacos_client_base.py +0 -0
  78. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/nacos_config_manager.py +0 -0
  79. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/nacos_heartbeat_manager.py +0 -0
  80. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/nacos_service.py +0 -0
  81. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/nacos_service_discovery.py +0 -0
  82. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/nacos_service_registration.py +0 -0
  83. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/synacos/param.py +0 -0
  84. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/tools/__init__.py +0 -0
  85. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/tools/docs.py +0 -0
  86. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/tools/env.py +0 -0
  87. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/tools/merge_headers.py +0 -0
  88. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/tools/snowflake.py +0 -0
  89. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon/tools/timing.py +0 -0
  90. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon_python_lib.egg-info/SOURCES.txt +0 -0
  91. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon_python_lib.egg-info/dependency_links.txt +0 -0
  92. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon_python_lib.egg-info/entry_points.txt +0 -0
  93. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/src/sycommon_python_lib.egg-info/requires.txt +0 -0
  94. {sycommon_python_lib-0.1.57b3 → sycommon_python_lib-0.1.57b4}/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.57b3
3
+ Version: 0.1.57b4
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sycommon-python-lib"
3
- version = "0.1.57b3"
3
+ version = "0.1.57b4"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -256,6 +256,9 @@ class RabbitMQClient:
256
256
  self._message_handler = handler
257
257
 
258
258
  async def _process_message_callback(self, message: AbstractIncomingMessage):
259
+ # 定义标志位,记录我们是否需要重试(即业务是否失败)
260
+ should_retry = False
261
+
259
262
  try:
260
263
  msg_obj: MQMsgModel
261
264
  if self.auto_parse_json:
@@ -264,8 +267,9 @@ class RabbitMQClient:
264
267
  msg_obj = MQMsgModel(**body_dict)
265
268
  except json.JSONDecodeError as e:
266
269
  logger.error(f"JSON解析失败: {e}")
267
- await message.nack(requeue=False)
268
- return
270
+ # 格式错误,无法处理,直接拒绝不重试
271
+ await message.reject(requeue=False)
272
+ return # 这里 return 了,不会走下面的 finally
269
273
  else:
270
274
  msg_obj = MQMsgModel(
271
275
  body=message.body.decode("utf-8"),
@@ -279,32 +283,48 @@ class RabbitMQClient:
279
283
  if self._message_handler:
280
284
  await self._message_handler(msg_obj, message)
281
285
 
282
- await message.ack()
286
+ # 如果正常执行到这里,说明业务成功
287
+ # await message.ack()
288
+ # 我们移除这里的 ack,统一交给 finally 处理
283
289
 
284
290
  except Exception as e:
285
291
  logger.error(f"消息处理异常: {e}", exc_info=True)
286
- headers = dict(message.headers) if message.headers else {}
287
- current_retry = int(headers.get("x-retry-count", 0))
292
+ # 业务异常,标记需要重试
293
+ should_retry = True
288
294
 
289
- if current_retry >= 3:
290
- logger.warning(f"重试次数超限,丢弃消息: {message.delivery_tag}")
291
- await message.reject(requeue=False)
292
- else:
293
- headers["x-retry-count"] = current_retry + 1
294
- try:
295
- new_msg = Message(
296
- body=message.body,
297
- headers=headers,
298
- content_type=message.content_type,
299
- delivery_mode=message.delivery_mode
300
- )
301
- # 这里的 publish 如果失败,会触发重连机制
302
- # 但注意,当前是在回调线程中,建议做好异常捕获
303
- await self._exchange.publish(new_msg, routing_key=message.routing_key)
304
- await message.ack()
305
- except Exception as pub_err:
306
- logger.error(f"重试发布失败: {pub_err}")
295
+ finally:
296
+ # 【核心修复】无论发生什么,最后都要给 MQ 一个交待
297
+ if should_retry:
298
+ headers = dict(message.headers) if message.headers else {}
299
+ current_retry = int(headers.get("x-retry-count", 0))
300
+
301
+ if current_retry >= 3:
302
+ logger.warning(f"重试次数超限,丢弃消息: {message.delivery_tag}")
307
303
  await message.reject(requeue=False)
304
+ else:
305
+ headers["x-retry-count"] = current_retry + 1
306
+ try:
307
+ new_msg = Message(
308
+ body=message.body,
309
+ headers=headers,
310
+ content_type=message.content_type,
311
+ delivery_mode=message.delivery_mode
312
+ )
313
+ # 发送新消息用于重试
314
+ await self._exchange.publish(new_msg, routing_key=message.routing_key)
315
+
316
+ # 【关键】新消息发成功了,现在可以安全地 Ack 掉旧消息了
317
+ # 这样旧消息才会从队列中移除,避免死循环
318
+ await message.ack()
319
+
320
+ except Exception as pub_err:
321
+ logger.error(f"重试发布失败,消息将丢失: {pub_err}")
322
+ # 发布失败,无法重试,只能丢弃旧消息(或者 Nack requeue=True)
323
+ # 为了防止死循环,这里通常建议 Reject (False) 并配置死信队列
324
+ await message.reject(requeue=False)
325
+ else:
326
+ # 业务正常执行,直接 Ack
327
+ await message.ack()
308
328
 
309
329
  async def start_consuming(self) -> Optional[ConsumerTag]:
310
330
  if self._closed:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.57b3
3
+ Version: 0.1.57b4
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown