Как создать гибкую пружинную загрузочную кромку? - PullRequest
0 голосов
/ 19 июня 2020

Следуя этому руководству и этому , я создаю систему, состоящую из 3 микросервисов:

  • пограничный сервис: может принимать и отправлять запросы на нисходящий поток
  • Основная микрослужба: куда приходят все запросы и затем обрабатываются путем выборки данных из базы данных
  • Служба eureka: способна обнаруживать две другие службы.

Моя идея заключается в использовании пограничного сервиса для социальной аутентификации, но перед внедрением аутентификации я решил протестировать с помощью Postman мой пограничный сервис, чтобы узнать, может ли он подключиться к основной службе.

работает правильно, но для этого мне пришлось создать пограничную службу, которая является копией базовой службы, за исключением базы данных и интерфейса crud (моя пограничная служба имеет класс DTO).

Мой контроллер в основная служба:

@RestController
public class MainController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping("/")
    public String welcome(){
        return "Welcome to the 301 Java Microservice!";
    }
    @GetMapping("/employees")
    public List<Employees> getAllEmployees(){
        return (List<Employees>) employeeService.findAll();
    }

    @GetMapping("/employees/{id}")
    public ResponseEntity<Optional<Employees>> getEmployeeById(@PathVariable(value = "id") Long employeeId) {
        Optional<Employees> empl = employeeService.findById(employeeId);
        if(!empl.isPresent()){
            throw new CustomNotFound(employeeId);
        }
        else return ResponseEntity.ok().body(empl);





    }

    @PostMapping("/employees")
    public Employees createEmployee(@Valid @RequestBody Employees employee) {
        return employeeService.save(employee);
    }

    @DeleteMapping("/employees/{id}")
    public Map< String, Boolean > deleteEmployee(@PathVariable(value = "id") Long employeeId) {
        try{
            employeeService.deleteById(employeeId);
        } catch (Exception e) {
            e.printStackTrace();
            throw new CustomNotFound(employeeId);
        }
        Map < String, Boolean > response = new HashMap< >();
        response.put("deleted", Boolean.TRUE);
        return response;
    }

}

, а в пограничной службе:

@RestController
public class MainController {

    private final MainControllerInt mainControllerInt;

    public MainController(MainControllerInt mainControllerInt) {
        this.mainControllerInt = mainControllerInt;
    }


    @GetMapping("/")
    public String welcome(){
        return "Welcome to the 301 Java Microservice!";
    }
    @GetMapping("/employees")
    public List<EmployeesDto> getAllEmployees(){
        return (List<EmployeesDto>) mainControllerInt.findAll();
    }

    @GetMapping("/employees/{id}")
    public ResponseEntity<Optional<EmployeesDto>> getEmployeeById(@PathVariable(value = "id") Long employeeId) {
        Optional<EmployeesDto> empl = mainControllerInt.findById(employeeId);
        if(!empl.isPresent()){
            throw new CustomNotFound(employeeId);
        }
        else return ResponseEntity.ok().body(empl);





    }

    @PostMapping("/employees")
    public EmployeesDto createEmployee(@Valid @RequestBody EmployeesDto employee) {
        return mainControllerInt.save(employee);
    }

    @DeleteMapping("/employees/{id}")
    public Map< String, Boolean > deleteEmployee(@PathVariable(value = "id") Long employeeId) {
        try{
            mainControllerInt.deleteById(employeeId);
        } catch (Exception e) {
            e.printStackTrace();
            throw new CustomNotFound(employeeId);
        }
        Map < String, Boolean > response = new HashMap< >();
        response.put("deleted", Boolean.TRUE);
        return response;
    }
}

Эта реализация:

@FeignClient("301javamicro")
public interface MainControllerInt {
    @GetMapping("/employees")
    Iterable<EmployeesDto> findAll();
    @GetMapping("/employees/{id}")
    Optional<EmployeesDto> findById(@PathVariable(value = "id") Long id);
    @PostMapping("/employees")
    EmployeesDto save(@Valid @RequestBody EmployeesDto emp);
    @DeleteMapping("/employees/{id}")
    void deleteById(@PathVariable(value = "id") Long id);
}

, и у меня есть DTO:

@Data
public class EmployeesDto {
    private long employee_id;
    private String employee_name;
    private String employee_last_name;
    private String employee_address;
    private String employee_phone;
    private String job_position;
    private int salary;
    private String currency;
}

Как вы видите, мой RestController точно такой же в обоих микросервисах. Я хотел бы избежать дублирования или копирования и вставки кода.

есть ли возможность создать гибкую пограничную службу, способную просто проверять пользователя и передавать запрос в соответствии с моделью: получить что угодно -> проверить пользователя - > отправить в ядро ​​все, что и будет основным сервисом для проверки запроса и в случае плохого результата отправит обратно на край 404, 500 e cc ....?

Спасибо за помощь.

...