| 
...
 | 
...
 | 
@@ -13,6 +13,8 @@ import org.springframework.stereotype.Service; | 
| 
 | 
 | 
 import org.springframework.util.LinkedMultiValueMap;
 | 
| 
 | 
 | 
 import org.springframework.util.MultiValueMap;
 | 
| 
 | 
 | 
 import org.springframework.util.StringUtils;
 | 
| 
 | 
 | 
 import org.springframework.web.client.HttpClientErrorException;
 | 
| 
 | 
 | 
 import org.springframework.web.client.RestClientException;
 | 
| 
 | 
 | 
 import org.springframework.web.client.RestTemplate;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 import javax.annotation.Resource;
 | 
| 
...
 | 
...
 | 
@@ -69,6 +71,10 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     private static Boolean LOGIN_STATUS=false;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * 失败重发请求次数
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     private static final int RETRY_TIMES= 3;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * HTTP请求框架
 | 
| 
...
 | 
...
 | 
@@ -175,7 +181,18 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     @Scheduled(fixedRate = 10000)
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * 获取返回信息的状态码
 | 
| 
 | 
 | 
      * @param response response对象
 | 
| 
 | 
 | 
      * @return
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     private String  getResponseDataCode(ResponseEntity<String> response){
 | 
| 
 | 
 | 
         JSONObject resJson = JSON.parseObject(response.getBody());
 | 
| 
 | 
 | 
         String code = resJson.getString("code");
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         return code;
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
     @Scheduled(fixedDelay = 10000)
 | 
| 
 | 
 | 
     public void heartBit() {
 | 
| 
 | 
 | 
         if (!StringUtils.isEmpty(TOKEN) && LOGIN_STATUS){
 | 
| 
 | 
 | 
             /*
 | 
| 
...
 | 
...
 | 
@@ -200,10 +217,12 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
              * 提交HTTP访问,获取返回信息
 | 
| 
 | 
 | 
              */
 | 
| 
 | 
 | 
             ResponseEntity<String> response = restTemplate.postForEntity(HEARTBEAT_URL, request, String.class);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             //  输出结果
 | 
| 
 | 
 | 
             System.out.println(response.getBody());
 | 
| 
 | 
 | 
             log.info(response.getBody());
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             if (response.getStatusCode().equals(HttpStatus.OK)) {
 | 
| 
 | 
 | 
                 log.info("心跳成功");
 | 
| 
 | 
 | 
                 log.info("心跳成功,token:[{}]",TOKEN);
 | 
| 
 | 
 | 
             } else {
 | 
| 
 | 
 | 
                 log.error("心跳失败");
 | 
| 
 | 
 | 
             }
 | 
| 
...
 | 
...
 | 
@@ -217,6 +236,8 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public Boolean sendMsg(MSG msg) {
 | 
| 
 | 
 | 
         if (LOGIN_STATUS) {
 | 
| 
 | 
 | 
             try{
 | 
| 
 | 
 | 
                 log.info("开始转发消息:{}",msg.toString());
 | 
| 
 | 
 | 
                 /*
 | 
| 
 | 
 | 
                  * 发起HTTP 登录请求
 | 
| 
 | 
 | 
                  * 登录接口的请求头为application/json
 | 
| 
...
 | 
...
 | 
@@ -252,20 +273,22 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 HttpEntity<MSGS> request = new HttpEntity<MSGS>(msgs, headers);
 | 
| 
 | 
 | 
                 ResponseEntity<String> response = restTemplate.postForEntity(SEND_MSG_URL, request, String.class);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 if (response.getStatusCode().equals(HttpStatus.OK)) {
 | 
| 
 | 
 | 
                     JSONObject resJson = JSON.parseObject(response.getBody());
 | 
| 
 | 
 | 
                     String code = resJson.getString("code");
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             System.out.println(response.getBody());
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             if (response.getStatusCode().equals(HttpStatus.OK) && "200".equals(code)) {
 | 
| 
 | 
 | 
                     if ("200".equals(code)) {
 | 
| 
 | 
 | 
                         log.info("消息发送成功");
 | 
| 
 | 
 | 
                         return true;
 | 
| 
 | 
 | 
             } else {
 | 
| 
 | 
 | 
                 log.error("消息发送失败");
 | 
| 
 | 
 | 
                     }
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
                 log.info("消息发送失败->{}",response.getBody());
 | 
| 
 | 
 | 
             }catch (Exception e){
 | 
| 
 | 
 | 
                 log.info("消息发送失败->{},失败原因:{}",msg.toString(),e.toString());
 | 
| 
 | 
 | 
                 log.error("消息发送失败->{},失败原因:{}",msg.toString(),e.toString());
 | 
| 
 | 
 | 
                 return false;
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         }else {
 | 
| 
 | 
 | 
             log.info("未登陆,消息发送失败");
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         return false;
 | 
| 
 | 
 | 
     }
 | 
| 
...
 | 
...
 | 
@@ -276,8 +299,8 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
      *
 | 
| 
 | 
 | 
      * @return
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     @Async
 | 
| 
 | 
 | 
     @Scheduled(fixedRate = 300)
 | 
| 
 | 
 | 
 //    @Async
 | 
| 
 | 
 | 
     @Scheduled(fixedRate = 1000)
 | 
| 
 | 
 | 
     public JSONArray getMsg() {
 | 
| 
 | 
 | 
         if(!LOGIN_STATUS){
 | 
| 
 | 
 | 
             login();
 | 
| 
...
 | 
...
 | 
@@ -287,6 +310,7 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
          * 发起HTTP 登录请求
 | 
| 
 | 
 | 
          * 登录接口的请求头为application/json
 | 
| 
 | 
 | 
          */
 | 
| 
 | 
 | 
         try{
 | 
| 
 | 
 | 
             HttpHeaders headers = new HttpHeaders();
 | 
| 
 | 
 | 
             headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
 | 
| 
 | 
 | 
             headers.setBearerAuth(TOKEN);
 | 
| 
...
 | 
...
 | 
@@ -302,22 +326,24 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
              */
 | 
| 
 | 
 | 
             ResponseEntity<String> response = restTemplate.postForEntity(GET_MSG_URL, request, String.class);
 | 
| 
 | 
 | 
             //  输出结果
 | 
| 
 | 
 | 
         log.info("获取到消息返回---{}---",response.getBody());
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
             if (response.getStatusCode().equals(HttpStatus.OK)) {
 | 
| 
 | 
 | 
                 /*
 | 
| 
 | 
 | 
                  * 从返回信息中确定是否获取到消息
 | 
| 
 | 
 | 
                  */
 | 
| 
 | 
 | 
                 JSONObject resJson = JSON.parseObject(response.getBody());
 | 
| 
 | 
 | 
                 String code = resJson.getString("code");
 | 
| 
 | 
 | 
         if (response.getStatusCode().equals(HttpStatus.OK) && "200".equals(code)) {
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 if ("200".equals(code)){
 | 
| 
 | 
 | 
                     JSONArray data = resJson.getJSONArray("data");
 | 
| 
 | 
 | 
             log.info("消息接收成功,接收消息为>>>{}<<<",data.toString());
 | 
| 
 | 
 | 
                     log.info("消息接收成功,接收消息数量>>>{}<<<",data.size());
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                     for (int i = 0; i<data.size() ; i++) {
 | 
| 
 | 
 | 
                 /*
 | 
| 
 | 
 | 
                     取得是大数据小组的实体,他们的msg.body的封装是以对象实体object封装的。不是json字符串。
 | 
| 
 | 
 | 
                  */
 | 
| 
 | 
 | 
                         String msg = data.getObject(i,String.class);
 | 
| 
 | 
 | 
                         log.info("开始转发消息---{}---",msg);
 | 
| 
 | 
 | 
                         JSONObject rootJson = JSON.parseObject(msg);
 | 
| 
 | 
 | 
                         JSONObject msgJson = rootJson.getJSONObject("MSG");
 | 
| 
 | 
 | 
                         JSONObject body = msgJson.getJSONObject("BODY");
 | 
| 
...
 | 
...
 | 
@@ -329,44 +355,54 @@ public class MessageBusProcessor { | 
| 
 | 
 | 
                         transMsg.setHEADER(msgHeader);
 | 
| 
 | 
 | 
                         transMsg.setBODY(transBody);
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 transMsg.toString();
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 /*
 | 
| 
 | 
 | 
                     自定义对返回数据的处理
 | 
| 
 | 
 | 
                 */
 | 
| 
 | 
 | 
                         log.info("开始转发消息");
 | 
| 
 | 
 | 
                         Boolean sendResult = sendMsg(transMsg);
 | 
| 
 | 
 | 
                         /**
 | 
| 
 | 
 | 
                  * todo:消息失败处理
 | 
| 
 | 
 | 
                          * todo:转发消息失败处理
 | 
| 
 | 
 | 
                          */
 | 
| 
 | 
 | 
                         if(!sendResult){
 | 
| 
 | 
 | 
                             log.error("!!!!!!消息--->{}<---转发失败!!!!!!,尝试重发",transMsg.toString());
 | 
| 
 | 
 | 
                             //todo:消息备份或者重发?
 | 
| 
 | 
 | 
                             reSend(transMsg);
 | 
| 
 | 
 | 
                         }
 | 
| 
 | 
 | 
                     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                     return data;
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
                 }
 | 
| 
 | 
 | 
             } else {
 | 
| 
 | 
 | 
                 log.error("消息获取失败");
 | 
| 
 | 
 | 
                 return new JSONArray();
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
         }catch (Exception httpE){
 | 
| 
 | 
 | 
             log.info("消息获取失败,失败原因:{}",httpE.toString());
 | 
| 
 | 
 | 
             log.error("消息获取失败,失败原因:{}",httpE.toString());
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         return new JSONArray();
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     /**
 | 
| 
 | 
 | 
      * 读取备份消息并消息重发
 | 
| 
 | 
 | 
      * @return
 | 
| 
 | 
 | 
      */
 | 
| 
 | 
 | 
     public Boolean reSend(){
 | 
| 
 | 
 | 
         return false;
 | 
| 
 | 
 | 
     public void reSend(MSG msg){
 | 
| 
 | 
 | 
         log.error("***进入重发***");
 | 
| 
 | 
 | 
         for (int i = 0; i < RETRY_TIMES; i++) {
 | 
| 
 | 
 | 
             Boolean sendResult = sendMsg(msg);
 | 
| 
 | 
 | 
             if (sendResult){
 | 
| 
 | 
 | 
                 log.error("***重发成功***");
 | 
| 
 | 
 | 
                 break;
 | 
| 
 | 
 | 
             }
 | 
| 
 | 
 | 
         }
 | 
| 
 | 
 | 
         log.error("***已尝试重发三次,重发失败***");
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 /**
 | 
| 
 | 
 | 
  * 消息发送实体类
 | 
| 
 | 
 | 
  * 消息实体类
 | 
| 
 | 
 | 
  */
 | 
| 
 | 
 | 
 class MSGS implements Serializable {
 | 
| 
 | 
 | 
     private MSG MSG;
 | 
| 
...
 | 
...
 | 
@@ -405,6 +441,11 @@ class MSG { | 
| 
 | 
 | 
     public void setBODY(String BODY) {
 | 
| 
 | 
 | 
         this.BODY = BODY;
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
     @Override
 | 
| 
 | 
 | 
     public String toString() {
 | 
| 
 | 
 | 
         return this.BODY;
 | 
| 
 | 
 | 
     }
 | 
| 
 | 
 | 
 }
 | 
| 
 | 
 | 
 
 | 
| 
 | 
 | 
 /**
 | 
...
 | 
...
 | 
 |