#!/usr/bin/env python3
"""
Eureka服务发现工具
用法: python eureka_client.py [服务名]
"""
import traceback
import sys
import requests
from requests.auth import HTTPBasicAuth

def get_eurake_server(eureka_server= "http://user:psd@192.168.10.54:8761/eureka/",target_service=None):
    EUREKA_SERVER = eureka_server
    # 配置参数
    # EUREKA_SERVER = "http://192.168.10.54:8761/eureka/"
    # 从 EUREKA_SERVER 提取  USERNAME      PASSWORD
    # USERNAME = "user"
    # PASSWORD = "psd"
    user_name = EUREKA_SERVER.split('@')[0].split('//')[1].split(':')
    USERNAME = user_name[0]
    PASSWORD = user_name[1]
    EUREKA_SERVER = EUREKA_SERVER.replace(f"{USERNAME}:{PASSWORD}@", '')
    print(EUREKA_SERVER, USERNAME, PASSWORD)
    # 解析命令行参数
    target_service = None
    if len(sys.argv) > 1:
        target_service = sys.argv[1].upper()
    try:
        # 获取所有应用
        response = requests.get(
            f"{EUREKA_SERVER}apps",
            auth=HTTPBasicAuth(USERNAME, PASSWORD),
            headers={'Accept': 'application/json'},
            timeout=10)
        if response.status_code != 200:
            print(f"错误: HTTP {response.status_code}")
            sys.exit(1)
            return {}
        data = response.json()
        apps = data.get('applications', {}).get('application', [])
        if not apps:
            print("Eureka服务器上没有注册的服务")
            return {}
        all_service_dict=dict()
        print(f"找到 {len(apps)} 个服务:\n")
        for app in apps:
            app_name = app.get('name')
            instances = app.get('instance', [])
            up_instances = [i for i in instances if i.get('status') == 'UP']
            print(f"{app_name}: {len(up_instances)}/{len(instances)} 个实例可用 ip: {[i.get('ipAddr') for i in up_instances]}")
            all_service_dict[app_name]= {
                'name': app_name,
                'urls': [i.get('homePageUrl') for i in up_instances] # http://ip:port
            }
        print(all_service_dict)
        # 指定 服务
        if  target_service:
            if target_service in all_service_dict:
                print(f"服务 {target_service} 信息:")
                print(all_service_dict[target_service])
            else:
                print(f"服务 {target_service} 未找到")
                return {}
return all_service_dict except Exception
as e: print(f"错误: {e}") traceback.print_exc() sys.exit(1) return {} if __name__ == "__main__": get_eurake_server("http://user:psd@19192.168.10.54:8761/euraka/","user-service")




 

 

 

 

 
posted on 2025-12-15 11:30  lshan  阅读(3)  评论(0)    收藏  举报