sycommon-python-lib 0.1.10__py3-none-any.whl → 0.1.12__py3-none-any.whl

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.

@@ -66,6 +66,10 @@ class NacosService(metaclass=SingletonMeta):
66
66
  self.real_ip = self.get_service_ip(self.host)
67
67
  self._long_term_retry_count = 0 # 长期重试计数器
68
68
 
69
+ # 轮询索引,用于在所有实例中进行轮询选择
70
+ self._round_robin_index = 0
71
+ self._round_robin_lock = threading.Lock() # 保护轮询索引的线程安全
72
+
69
73
  if self.enable_register_nacos:
70
74
  # 初始化客户端(仅在首次调用时执行)
71
75
  self._initialize_client()
@@ -361,7 +365,12 @@ class NacosService(metaclass=SingletonMeta):
361
365
  self.registered = False
362
366
  SYLogger.warning("nacos:本地状态显示已注册,但Nacos中未找到服务实例,准备重新注册")
363
367
 
364
- metadata = {"ignore-metrics": "true"}
368
+ metadata = {
369
+ "ignore-metrics": "true",
370
+ "preserved.heart.beat.interval": "3000", # 心跳间隔 3 秒
371
+ "preserved.heart.beat.timeout": "15000", # 心跳超时 15 秒
372
+ "preserved.ip.delete.timeout": "30000" # 实例删除超时 30 秒
373
+ }
365
374
  if self.version:
366
375
  metadata["version"] = self.version
367
376
 
@@ -731,8 +740,13 @@ class NacosService(metaclass=SingletonMeta):
731
740
 
732
741
  return self.get_service_instances(service_name, group, version)
733
742
 
734
- def get_service_instances(self, service_name: str, group: str = "DEFAULT_GROUP", version: str = None) -> List[Dict]:
735
- """获取服务实例列表"""
743
+ def get_service_instances(self, service_name: str, group: str = "DEFAULT_GROUP", target_version: str = None) -> List[Dict]:
744
+ """
745
+ 获取服务实例列表,并按照以下优先级规则筛选:
746
+ 1. 相同版本号的实例
747
+ 2. 无版本号的实例
748
+ 3. 所有实例中轮询
749
+ """
736
750
  try:
737
751
  namespace_id = self.nacos_config['namespaceId']
738
752
  instances = self.nacos_client.list_naming_instance(
@@ -741,13 +755,56 @@ class NacosService(metaclass=SingletonMeta):
741
755
  group_name=group,
742
756
  healthy_only=True,
743
757
  )
758
+
744
759
  if not instances or 'hosts' not in instances:
760
+ SYLogger.info(f"nacos:未发现 {service_name} 的服务实例")
745
761
  return []
746
762
 
763
+ all_instances = instances.get('hosts', [])
747
764
  SYLogger.info(
748
- f"nacos:发现 {len(instances.get('hosts', []))} 个 {service_name} 服务实例")
765
+ f"nacos:共发现 {len(all_instances)} 个 {service_name} 服务实例")
766
+
767
+ # 确定要使用的目标版本,如果未指定则使用当前服务的版本
768
+ version_to_use = target_version or self.version
769
+
770
+ # 按规则筛选实例
771
+ if version_to_use:
772
+ # 1. 筛选相同版本号的实例
773
+ same_version_instances = [
774
+ instance for instance in all_instances
775
+ if instance.get('metadata', {}).get('version') == version_to_use
776
+ ]
777
+
778
+ if same_version_instances:
779
+ SYLogger.info(
780
+ f"nacos:筛选出 {len(same_version_instances)} 个与当前版本({version_to_use})匹配的实例")
781
+ return same_version_instances
782
+
783
+ # 2. 如果没有相同版本的实例,筛选无版本号的实例
784
+ no_version_instances = [
785
+ instance for instance in all_instances
786
+ if 'version' not in instance.get('metadata', {})
787
+ ]
788
+
789
+ if no_version_instances:
790
+ SYLogger.info(
791
+ f"nacos:未找到相同版本({version_to_use})的实例,筛选出 {len(no_version_instances)} 个无版本号的实例")
792
+ return no_version_instances
793
+
794
+ # 3. 如果没有指定版本或前两个规则都不满足,使用轮询方式选择所有健康实例
795
+ SYLogger.info(
796
+ f"nacos:使用轮询方式从 {len(all_instances)} 个实例中选择")
797
+
798
+ # 线程安全地获取下一个轮询索引
799
+ with self._round_robin_lock:
800
+ selected_index = self._round_robin_index % len(all_instances)
801
+ # 更新轮询索引,为下一次请求做准备
802
+ self._round_robin_index = (
803
+ selected_index + 1) % len(all_instances)
804
+
805
+ # 返回包含当前选中实例的列表
806
+ return [all_instances[selected_index]]
749
807
 
750
- return instances.get('hosts', [])
751
808
  except Exception as e:
752
809
  SYLogger.error(f"nacos:服务发现失败: {service_name}: {str(e)}")
753
810
  return []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sycommon-python-lib
3
- Version: 0.1.10
3
+ Version: 0.1.12
4
4
  Summary: Add your description here
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,5 +1,6 @@
1
+ command/cli.py,sha256=bP2LCLkRvfETIwWkVD70q5xFxMI4D3BpH09Ws1f-ENc,5849
1
2
  sycommon/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- sycommon/services.py,sha256=_XgQF72-NisNV2bQJcHPWSIDd_RG-g8RmGN_QxQ8noE,8104
3
+ sycommon/services.py,sha256=4oE0KXNJxM284nSMTO3PcbJFnMQpmXN6kUmeyIGLWfI,8272
3
4
  sycommon/config/Config.py,sha256=9yO5b8WfvEDvkyrGrlwrLFasgh_-MjcEvGF20Gz5Xo4,3041
4
5
  sycommon/config/DatabaseConfig.py,sha256=ILiUuYT9_xJZE2W-RYuC3JCt_YLKc1sbH13-MHIOPhg,804
5
6
  sycommon/config/EmbeddingConfig.py,sha256=gPKwiDYbeu1GpdIZXMmgqM7JqBIzCXi0yYuGRLZooMI,362
@@ -10,7 +11,7 @@ sycommon/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
11
  sycommon/database/base_db_service.py,sha256=J5ELHMNeGfzA6zVcASPSPZ0XNKrRY3_gdGmVkZw3Mto,946
11
12
  sycommon/database/database_service.py,sha256=B9tCaMsKGK87XF20YQh-eGupa3dq0JXymKnAAJvS2DQ,3060
12
13
  sycommon/health/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- sycommon/health/health_check.py,sha256=KhRkHEvTMH0Ygtaq7IByFevMnaTPD1NnU6EAirRnqO8,387
14
+ sycommon/health/health_check.py,sha256=EhfbhspRpQiKJaxdtE-PzpKQO_ucaFKtQxIm16F5Mpk,391
14
15
  sycommon/health/ping.py,sha256=FTlnIKk5y1mPfS1ZGOeT5IM_2udF5aqVLubEtuBp18M,250
15
16
  sycommon/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  sycommon/logging/kafka_log.py,sha256=206KvbJrYcT2cSkECumSXIPMn3J2Skyd5OJJvWGMarw,20417
@@ -26,22 +27,23 @@ sycommon/middleware/mq.py,sha256=4wBqiT5wJGcrfjk2GSr0_U3TStBxoNpHTzcRxVlMEHE,183
26
27
  sycommon/middleware/timeout.py,sha256=fImlAPLm4Oa8N9goXtT_0os1GZPCi9F92OgXU81DgDU,656
27
28
  sycommon/middleware/traceid.py,sha256=oGTJ2jtdea_3NgaAwXLpUug5dGUYRQeM4r1n2icuvC8,6839
28
29
  sycommon/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- sycommon/models/base_http.py,sha256=hcebQSPlGtx0GrLNK02VTDpviCBILaMrWijmlKEQu3I,3013
30
+ sycommon/models/base_http.py,sha256=EICAAibx3xhjBsLqm35Mi3DCqxp0FME4rD_3iQVjT_E,3051
30
31
  sycommon/models/log.py,sha256=rZpj6VkDRxK3B6H7XSeWdYZshU8F0Sks8bq1p6pPlDw,500
31
32
  sycommon/models/mqlistener_config.py,sha256=PPwhAVJ2AWvVAvNox_1t0fuBKTyRH3Ui9cuuU-q7Byo,1590
32
33
  sycommon/models/mqmsg_model.py,sha256=cxn0M5b0utQK6crMYmL-1waeGYHvK3AlGaRy23clqTE,277
33
34
  sycommon/models/mqsend_config.py,sha256=NQX9dc8PpuquMG36GCVhJe8omAW1KVXXqr6lSRU6D7I,268
34
35
  sycommon/models/sso_user.py,sha256=i1WAN6k5sPcPApQEdtjpWDy7VrzWLpOrOQewGLGoGIw,2702
35
- sycommon/rabbitmq/rabbitmq_client.py,sha256=QLsn_jqWtBihmBXgrFRZx9S5AhtnvWIuolkfOHno0Wc,30782
36
- sycommon/rabbitmq/rabbitmq_service.py,sha256=Cl3zWa1PVv3kqpYWKtkP-SomXUSgVNDqzkhE8PuvCR0,22274
36
+ sycommon/rabbitmq/rabbitmq_client.py,sha256=X89rwxEfjoDJGq4TJ8on4jYNOMUMa18H460FRhNkPU0,36894
37
+ sycommon/rabbitmq/rabbitmq_service.py,sha256=LgN_g3UFs8WavMzxX_biIU4H6ONAo6aE8Em8h9xAKNc,27828
37
38
  sycommon/synacos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- sycommon/synacos/feign.py,sha256=ghbI2_6g1C5P0EcU8y2DeDZ9E7Mv0T1iHwptLX1U6NA,12075
39
- sycommon/synacos/nacos_service.py,sha256=8l2qaVg5GQSTybGrcdmg0B5jRNAzbOPM3mjQ6T04A2I,30816
39
+ sycommon/synacos/feign.py,sha256=PX7jqexICGm-a9oKULPFUTcNQVeXbXwRo12XXy5oHnM,21268
40
+ sycommon/synacos/nacos_service.py,sha256=bbk1uTKTE3vcSGuUGapcydWFHYUMsPB9GS1mosYmM-A,33514
40
41
  sycommon/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
42
  sycommon/tools/docs.py,sha256=OPj2ETheuWjXLyaXtaZPbwmJKfJaYXV5s4XMVAUNrms,1607
42
43
  sycommon/tools/snowflake.py,sha256=rc-VUjBMMpdAvbnHroVwfVt1xzApJbTCthUy9mglAuw,237
43
44
  sycommon/tools/timing.py,sha256=OiiE7P07lRoMzX9kzb8sZU9cDb0zNnqIlY5pWqHcnkY,2064
44
- sycommon_python_lib-0.1.10.dist-info/METADATA,sha256=UteBh6HBuWlcC-6wGj2ro9zGDM0f1O5HM39o6yi2jMM,7005
45
- sycommon_python_lib-0.1.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
46
- sycommon_python_lib-0.1.10.dist-info/top_level.txt,sha256=qb-vRf3lrmIaCLrGZxsv6k8Q8l3_lGuAeFtwjh0wYCQ,9
47
- sycommon_python_lib-0.1.10.dist-info/RECORD,,
45
+ sycommon_python_lib-0.1.12.dist-info/METADATA,sha256=XmI7IiLIZgFsfU1ocNpo5N5Jkr0v_3Dp1Bwi1TTzmaA,7005
46
+ sycommon_python_lib-0.1.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
47
+ sycommon_python_lib-0.1.12.dist-info/entry_points.txt,sha256=q_h2nbvhhmdnsOUZEIwpuoDjaNfBF9XqppDEmQn9d_A,46
48
+ sycommon_python_lib-0.1.12.dist-info/top_level.txt,sha256=98CJ-cyM2WIKxLz-Pf0AitWLhJyrfXvyY8slwjTXNuc,17
49
+ sycommon_python_lib-0.1.12.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ sycommon = command.cli:main