Add start registering service with thread
authoryoubowu <wu.youbo@zte.com.cn>
Fri, 10 Mar 2017 00:59:27 +0000 (08:59 +0800)
committer6092002067 <wu.youbo@zte.com.cn>
Fri, 10 Mar 2017 02:20:02 +0000 (10:20 +0800)
Issue-ID: HOLMES-50

Change-Id: I614d5337884da9e87ee1c2b63fe1a097fe430579
Signed-off-by: youbowu <wu.youbo@zte.com.cn>
holmes-actions/src/main/java/org/openo/holmes/common/config/MicroServiceConfig.java
holmes-actions/src/main/java/org/openo/holmes/common/utils/MSBRegisterUtil.java

index c17ad4a..44c52d3 100644 (file)
@@ -28,7 +28,7 @@ public class MicroServiceConfig {
     }\r
 \r
     public static String getMsbServerAddr() {\r
-        return AlarmConst.HTTP+getProperty("MSB_ADDR") + ":" + AlarmConst.MICRO_SERVICE_PORT;\r
+        return AlarmConst.HTTP + getProperty("MSB_ADDR") + ":" + AlarmConst.MICRO_SERVICE_PORT;\r
     }\r
 \r
     public static String getServiceIp() {\r
index 9f66178..1de431e 100644 (file)
@@ -26,6 +26,7 @@ import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.entity.ByteArrayEntity;\r
 import org.apache.http.impl.client.CloseableHttpClient;\r
 import org.apache.http.impl.client.HttpClients;\r
+import org.apache.http.util.EntityUtils;\r
 import org.jvnet.hk2.annotations.Service;\r
 import org.openo.holmes.common.api.entity.ServiceRegisterEntity;\r
 import org.openo.holmes.common.config.MicroServiceConfig;\r
@@ -35,13 +36,40 @@ import org.openo.holmes.common.constant.AlarmConst;
 @Service\r
 public class MSBRegisterUtil {\r
 \r
-    public boolean register(ServiceRegisterEntity entity) throws IOException {\r
+    public void register(ServiceRegisterEntity entity) throws IOException {\r
+        ((Runnable) () -> {\r
+            log.info("start inventory micro service register");\r
+            boolean flag = false;\r
+            int retry = 0;\r
+            while (!flag && retry < 20) {\r
+                log.info("inventory micro service register.retry:" + retry);\r
+                retry++;\r
+                flag = inner_register(entity);\r
+                if (!flag) {\r
+                    log.warn("micro service register failed, sleep 30S and try again.");\r
+                    threadSleep(30000);\r
+                } else {\r
+                    log.info("micro service register success!");\r
+                    break;\r
+                }\r
+            }\r
+            log.info("holmes micro service register end.");\r
+        }).run();\r
+    }\r
+\r
+    private void setHeader(HttpRequestBase httpRequestBase) {\r
+        httpRequestBase.setHeader("Content-Type", "text/html;charset=UTF-8");\r
+        httpRequestBase.setHeader("Accept", "application/json");\r
+        httpRequestBase.setHeader("Content-Type", "application/json");\r
+    }\r
+\r
+    private boolean inner_register(ServiceRegisterEntity entity) {\r
         CloseableHttpClient httpClient = HttpClients.createDefault();\r
         try {\r
             ObjectMapper mapper = new ObjectMapper();\r
             String content = mapper.writeValueAsString(entity);\r
-            HttpPost httpPost = new HttpPost(MicroServiceConfig.getMsbServerAddr()\r
-                    + "/api/microservices/v1/services?createOrUpdate=false");\r
+            HttpPost httpPost = new HttpPost(\r
+                    MicroServiceConfig.getMsbServerAddr() + "/api/microservices/v1/services?createOrUpdate=false");\r
             if (StringUtils.isNotEmpty(content)) {\r
                 httpPost.setEntity(new ByteArrayEntity(content.getBytes()));\r
             }\r
@@ -54,7 +82,7 @@ public class MSBRegisterUtil {
                 return false;\r
             }\r
             if (response.getStatusLine().getStatusCode() == AlarmConst.MICRO_SERVICE_STATUS_SUCCESS) {\r
-                log.info("Registration successful service to the bus :" + response.getEntity());\r
+                log.info("Registration successful service to the bus :" + EntityUtils.toString(response.getEntity()));\r
                 return true;\r
             } else {\r
                 log.warn(\r
@@ -62,14 +90,25 @@ public class MSBRegisterUtil {
                                 response.getStatusLine().getReasonPhrase());\r
                 return false;\r
             }\r
+        } catch (IOException e) {\r
+            log.warn("ServiceRegisterEntity:" + entity + " parse failed",e);\r
         } finally {\r
-            httpClient.close();\r
+            try {\r
+                httpClient.close();\r
+            } catch (IOException e) {\r
+                log.warn("At the time of registering service httpclient close failure",e);\r
+            }\r
         }\r
+        return false;\r
     }\r
 \r
-    private void setHeader(HttpRequestBase httpRequestBase) {\r
-        httpRequestBase.setHeader("Content-Type", "text/html;charset=UTF-8");\r
-        httpRequestBase.setHeader("Accept", "application/json");\r
-        httpRequestBase.setHeader("Content-Type", "application/json");\r
+    private void threadSleep(int second) {\r
+        log.info("start sleep ....");\r
+        try {\r
+            Thread.sleep(second);\r
+        } catch (InterruptedException error) {\r
+            log.error("thread sleep error.errorMsg:" + error.getMessage());\r
+        }\r
+        log.info("sleep end .");\r
     }\r
 }
\ No newline at end of file