Example #1
0
  /**
   * failover for trigger remote address
   *
   * @param addressArr
   * @return
   */
  public RemoteCallBack failoverTrigger(
      String handler_address, HashMap<String, String> handler_params, XxlJobLog jobLog) {
    if (handler_address.split(",").length > 1) {

      // for ha
      List<String> addressList = Arrays.asList(handler_address.split(","));
      Collections.shuffle(addressList);

      // for failover
      String failoverMessage = "";
      for (String address : addressList) {
        if (StringUtils.isNotBlank(address)) {
          HashMap<String, String> params = new HashMap<String, String>();
          params.put(HandlerParamEnum.TIMESTAMP.name(), String.valueOf(System.currentTimeMillis()));
          params.put(HandlerParamEnum.ACTION.name(), ActionEnum.BEAT.name());
          RemoteCallBack beatResult = HttpUtil.post(HttpUtil.addressToUrl(address), params);
          failoverMessage +=
              MessageFormat.format(
                  "BEAT running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>",
                  address, beatResult.getStatus(), beatResult.getMsg());
          if (RemoteCallBack.SUCCESS.equals(beatResult.getStatus())) {
            jobLog.setExecutorAddress(address);
            RemoteCallBack triggerCallback =
                HttpUtil.post(HttpUtil.addressToUrl(address), handler_params);
            triggerCallback.setStatus(RemoteCallBack.SUCCESS);
            failoverMessage +=
                MessageFormat.format(
                    "Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>",
                    address, triggerCallback.getStatus(), triggerCallback.getMsg());
            triggerCallback.setMsg(failoverMessage);
            return triggerCallback;
          }
        }
      }

      RemoteCallBack result = new RemoteCallBack();
      result.setStatus(RemoteCallBack.FAIL);
      result.setMsg(failoverMessage);
      return result;
    } else {
      jobLog.setExecutorAddress(handler_address);
      RemoteCallBack triggerCallback =
          HttpUtil.post(HttpUtil.addressToUrl(handler_address), handler_params);
      String failoverMessage =
          MessageFormat.format(
              "Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>",
              handler_address, triggerCallback.getStatus(), triggerCallback.getMsg());
      triggerCallback.setMsg(failoverMessage);
      return triggerCallback;
    }
  }