Eureka-webservice註冊及續約
阿新 • • 發佈:2018-12-16
註冊:
將應用(以下簡稱App)註冊到eureka服務中心中去,首先要給eureka server傳送一個請求,請求型別為HttpPost,請求引數型別content-type為application/xml,serverUrl為eureka Server的地址,例如:http://localhost:8761/eureka/apps,appName需要自己定,比如我這裡用的是EUREKA-APP,返回碼200即表註冊成功,然後還要傳一個xml檔案,裡面詳盡的設定了請求需要傳的具體引數。
xml如下:
<instance> <!--例項ID --> <instanceId>localhost:8080</instanceId> <!--例項HOST --> <hostName>localhost</hostName> <!--全域性應用名 --> <app>EUREKA-APP</app> <!--IP地址 --> <ipAddr>localhost</ipAddr> <!--例項狀態 --> <status>UP</status> <!--例項的覆蓋狀態 --> <overriddenstatus>UNKNOWN</overriddenstatus> <!--埠 --> <port enabled="true">8080</port> <securePort enabled="false">8443</securePort> <countryId>1</countryId> <!--使用的資料中心 --> <dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo"> <name>MyOwn</name> </dataCenterInfo> <!--租約資訊 --> <leaseInfo> <!--心跳間隔 --> <renewalIntervalInSecs>45</renewalIntervalInSecs> <!--例項過期時間 --> <durationInSecs>120</durationInSecs> </leaseInfo> <!--監控埠 --> <metadata> <management.port>8080</management.port> </metadata> <!--主頁 --> <homePageUrl>http://localhost:8080/edasa/login</homePageUrl> <!--資訊查詢介面 --> <statusPageUrl>http://localhost:8080/edasa/login</statusPageUrl> <!--健康檢查介面 --> <healthCheckUrl>http://localhost:8080/edasa/login</healthCheckUrl> <!--VIP 這裡的vipAddress 要與全域性應用名相同--> <vipAddress>eureka-app</vipAddress> <secureVipAddress>eureka-app</secureVipAddress> <isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer> <!--最後修改時間 --> <lastDirtyTimestamp>1528277019740</lastDirtyTimestamp> </instance>
還需要配置一個eureka-client.properties檔案。
eureka.serviceUrl.default=http://localhost:8761/eureka/apps
eureka.client.appName=eureka-app
eureka.client.instanceId=localhost:8080
java請求程式碼如下: serverUrl與appName是從xml裡讀取的,請自行處理。
public class EurekaClientPublishListener implements ServletContextListener{ try { if(Util.isNull(serverUrl)) { throw new RuntimeException("serverUrl is null"); } if(Util.isNull(appName)){ throw new RuntimeException("appName is null"); } HttpPost httpPost = new HttpPost(serverUrl+"/"+appName); //解決中文亂碼問題 StringEntity stringEntity = new StringEntity(xmlStr, "UTF-8"); stringEntity.setContentEncoding("UTF-8"); //引數型別application/xml httpPost.setHeader("content-type", "application/xml"); //引數設定,就是將xml先讀取出來,再用流字串的形式傳到請求中 httpPost.setEntity(stringEntity); HttpResponse response = httpClient.execute(httpPost); int code = response.getStatusLine().getStatusCode(); }catch (IOException e){ e.printStackTrace(); logger.error("http request failure"); } }
續約:
由於Eureka需要定時傳心跳請求,否則Eureka就會登出註冊其上的服務,故需要作一個定時任務不停地續約。
java程式碼如下:serverUrl 與 appName 和 instanceId 是從xml裡讀取的,請自行處理。
@Service public class EurekaJobService { HttpPut httpPut = new HttpPut(serverUrl+"/"+appName+"/"+instanceId); //引數型別application/xml httpPut.setHeader("content-type", "application/xml"); HttpResponse response = httpClient.execute(httpPut); code = response.getStatusLine().getStatusCode(); }
springApplicationContext.xml 配置定時任務:
<task:scheduled-tasks>
<task:scheduled ref="quartzTestBean" method="renewalClientContract" cron="*/20 * * * * ?" />
</task:scheduled-tasks>
<bean id="quartzTestBean" class="com.eureka.service.EurekaJobService"/>