#!usr/bin/envpython#_*_coding:utf-8_*_"""@note:自动注册服务@author:jiashunx@file:auto_register.py@time:2019/10/11"""importurllib2importbase64fromthreadingimportTimerclassAutoRegister:def__init__(self,req_model):self.req_model=req_model@staticmethoddef_get_request_models(apps):req_models=[]forappinapps:instance=app["instance"]json_body=AutoRegister。_get_request_json_body(instance=instance)registers=app["registers"]在寄存器中注册:username=Nonepassword=None如果在register中有“username”:username=register[“username”]如果在register中有“password”:password=register[“密码”]req_models.append(RequestModel(register_url=AutoRegister._format_register_url(register["url"]),username=username,password=password,json_body=json_body,instance=instance))returnreq_models@staticmethoddef_format_register_url(url):如果url不是None并且len(url)>0:如果不是url.endswith("/"):url+="/"如果不是url.endswith("eureka/"):url+="eureka/"返回url@staticmethoddef_get_request_json_body(instance):ipAddr=instance["ipAddr"]schema="http://"port=instance["port"]ifinstance["securePortEnable"]:schema="https://"port=instance["securePort"]homePageUrl=schema+ipAddr+":"+str(port)+"/"statusPageUrl=homePageUrl+"Status"healthCheckUrl=homePageUrl+"healthcheck"return""\+""+instance["instanceId"]+""+instance["ipAddr"]+""\+""+instance["appId"]+""\+""+instance["ipAddr"]+""\+"UP"\+"UNKNOWN"\+""+str(instance["port"])+""\+""+str(instance["securePort"])+""\+""+instance["vipAddress"]+""\+""+instance["secureVipAddress"]+""\+""\+"<名称>MyOwn"\+""\+""\+""+homePageUrl+""\+""+statusPageUrl+""\+""+healthCheckUrl+""\+""@staticmethoddefstart(apps):req_models=AutoRegister._get_request_models(apps)forreq_model在req_models:AutoRegister(req_model=req_model)._auto_register()def_auto_register(self):self._register()self._heartbeat()def_get_authorization_value(self):return"Basic"+base64.b64encode(str(self.req_model.username)+":"+str(self.req_model.password))def_register(self):success=Falsetry:request_url=self.req_model.register_url+"apps/"+self.req_model.appIdrequest=urllib2.Request(url=request_url,data=self.req_model.json_body,headers={"Content-Type":"application/xml","Authorization":self._get_authorization_value()})request.get_method=lambda:"POST"response=urllib2.urlopen(request)ifresponse.code==204:success=Trueprint("service:%sregistersuccess,targetregister-center:%s"%(str(self.req_model),self.req_model.register_url))除了异常,e:print("service:%sregisterfailed,targetregister-center:%s,errorreason:%s"%(str(self.req_model),self.req_model.register_url,str(e)))最后:返回成功def_heartbeat(self):success=False.instanceId请求=urllib2。请求(url=request_url,headers={"Authorization":self._get_authorization_value()})request.get_method=lambda:"PUT"response=urllib2.urlopen(request)ifresponse.code==200:success=Trueprint("service:%sheartbeatsuccess,targetregister-center:%s"%(str(self.req_model),self.req_model.register_url))除了异常,e:print("service:%sheartbeatfailed,targetregister-center:%s,errorreason:%s"%(str(self.req_model),self.req_model.register_url,str(e)))如果不成功:print("service:%sheartbeattoregister-center:%s失败,重试注册"%(str(self.req_model),self.req_model.register_url))self._register()#心跳间隔-30sTimer(30,self._heartbeat).start()classRequestModel:def__init__(self,register_url,username,password,json_body,instance):self.register_url=register_urlself.username=用户名;self.password=密码;self.json_body=json_bodyself.instance=instanceself.appId=instance["appId"]self.instanceId=instance["instanceId"]def__str__(self):return"{appId=%s,vipAddrss=%s,instanceId=%s}"%(self.instance["appId"],self.instance["vipAddress"],self.instance["instanceId"])if__name__=="__main__":AutoRegister.start([{"实例":{"appId":"appId","instanceId":"instanceId","vipAddress":"vipAddress","secureVipAddress":"vipAddress","ipAddr":"127.0.0.1","portEnable":True,"port":8080,"securePortEnable":False,"securePort":443},"registers":[{"url":"http://127.0.0.1:9081/"},{"url":"http://127.0.0。1:9082/"}]},{"instance":{"appId":"appId","instanceId":"instanceId","vipAddress":"vipAddress","secureVipAddress":"vipAddress","ipAddr":"127.0.0.1","portEnable":True,"port":8081,"securePortEnable":False,"securePort":443},"registers":[#开启注册中心进行安全认证,指定用户名和密码#注册中心可以添加参数关闭安全认证:-Dspring.security.enabled=false{"url":"http://127.0.0.1:9083/","username":"admin","密码":"admin123"}]}])