Резервный сервис Spring Boot - PullRequest
       39

Резервный сервис Spring Boot

0 голосов
/ 13 октября 2018

Мы запускаем API для загрузки файлов групп с API ниже: curl -X POST localhost: port / manager / createTask Rest API: (менеджер)

@RestController
@RequestMapping("/manager")
public class ClusterResource {
    @Autowired
    private MyService myService;
    @PostMapping("/createTask")
    @ResponseBody
    public ResponseEntity doTasks() throws Exception {
        myService.doTask();
        return new ResponseEntity<>(HttpStatus.OK);
    }
}

Класс MyService:

@Service
public class MyService
    private String templateFileName = "example";
    @Autowired
    private DownloadService downloadService;
    @Async
    public ResponseTaskDto doTasks() throws Exception {
         ResponseTaskDto result = new ResponseTaskDto();
         int downloadFlag;
         int taskFlag;
         for (int i = 0; i < 10; i ++) {
             if (doTask(i)) {
                 downloadFlag |= i; // downloaded file
                 result.setDownloadFlag(downloadFlag);
                 // execute some code to move file downloaded to correct location
                 // Execute setup proxy network, rollout services use resource file
                 taskFlag |= i; // setup done task
                 result.setTaskFlag(taskFlag);
             }
         }
         return clusterResult;
    }
    private boolen doTask(int number) throws Exception {
        String file = new String(templateFileName + number + ".mp4");
        try {
            downloadService.downloadFile(file);
        } catch (Exception ex) {
            // download service work well. can not here
            //throw ex;
            return false; // download filed: invalid url, ...
        }
        return true;
    }
   public class ResponseTaskDto {
        int downloadFlag;
        int taskFlag;
        public void setDownloadFlag(int flag) {
            this.downloadFlag = flag;
        }
        public int getDownloadFlag() {
            return this.downloadFlag;
        }
        public void setTaskFlag(int flag) {
            this.taskFlag = flag;
        }
        public int getTaskFlag() {
            return this.taskFlag;
        }
   }
}

Класс DownloadService:

@FeignClient(value = "http://downloader")
public interface DownloadService {
    @RequestMapping(value = "/downloader/api/", method = RequestMethod.POST, produces = {
            MediaType.APPLICATION_JSON_VALUE })
    void downloadFile(@PathVariable("file") String fileName);
}

мы являемся общедоступными 2-мя микросервисами менеджера как Manager1, Manager2 при вызове API, затем предполагается: предположим, что он будет использован manager1.

ЕслиСбой диспетчера микросервисов1 при получении слишком большого количества запросов.

Вопрос: Как администратору2 известно, что диспетчер служб прогресса1 продолжил createTask?Пример: Manager1 выполнил 3 шага (задача загрузки и настройки), прежде чем произошел сбой.

1 Ответ

0 голосов
/ 16 октября 2018

Вы должны попробовать балансировку нагрузки на ленте для баланса между экземплярами службы Manager1 и Manager2.Также нет никакого способа, которым manager2 мог бы забрать задачи manager1 между ними.

...