Как правильно настроить роутинг в Spring Cloud Gateway

140
23 декабря 2019, 13:00

Пытаюсь настроить роутинг в Gateway в properties прописываю адрес и куда перенаправлять, не могу понять логику работы.

server:
 port: 8081
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: gateway
  cloud:
   gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: servicetest
          uri: http://localhost:8080/
          predicates:
            - Path=/services/**
        - id: service-student
          uri: http://localhost:8082/
          predicates:
           - Path=/** 

ServiceTest

    spring.application.name=ServiceTest
    server.port=8080 

@RestController public class TestController {

@GetMapping("/hello")
public String hello(){
    return "Controller is work from " + this.getClass().getName().toString();
}

}

service-student

spring.datasource.url=jdbc:postgresql://localhost:5432/spring
spring.datasource.username=postgres
spring.datasource.password=root
spring.jpa.generate-ddl=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
server.port=8082
spring.application.name=service-student
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
@Slf4j
@RestController
@RequestMapping("/")
public class TeacherController {
    @Autowired
    TeacherRepository teacherRepository;
    @GetMapping("/teachers")
    public ResponseEntity<List<Teacher>> findAllTeachers(){
        List<Teacher> groups = teacherRepository.findAll();
        if(groups.isEmpty()){
            return new ResponseEntity<>(groups, HttpStatus.NO_CONTENT);
        }
        return new ResponseEntity<>(groups,HttpStatus.OK);
    }

При доступе через http://localhost:8081/teachers, все ок, возвращается JSON с нужного сервиса(id service-student). А вот если делать Path=/services/** и пробовать достучаться http://localhost:8081/services/hello доступа нет. Как правильно создать конфиг?

Answer 1

Вообщем, если имеем два запроса

http://localhost:8081/teachers

http://localhost:8081/services/hello

И два сервиса, соответвенно

http://localhost:8082/teachers

http://localhost:8080/hello

То настройка будет выглядеть вот таким образом

server:
 port: 8081
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: gateway
  cloud:
   gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: servicetest
          uri: http://localhost:8080/
          predicates:
            - Path=/services/{segment}
          filters: 
            - SetPath=/{segment}
        - id: service-student
          uri: http://localhost:8082/
          predicates:
           - Path=/** 

Хитрость в подмене пути через фильтр SetPath

Или можно не менять настройку, но тогда изменить маппинг в сервисе, добавив на класс аннотацию @RequestMapping("/services")

READ ALSO
Вывод на экран плавающего виджета

Вывод на экран плавающего виджета

Столкнулся с задачей: вывести на экран плавающий виджет, чтобы его можно было перемещать, взаимодействовать с нимВиджет НЕ для рабочего стола,...

153
for, foreach отличия? [дубликат]

for, foreach отличия? [дубликат]

Почему-то не нашел нормальной информации в интернете и погуглил по темам на стаковерфлоу, но так и не нашел в чем отличие for и for each в Java? Понятно...

160
Как настроить прогресс бар JProgressBar?

Как настроить прогресс бар JProgressBar?

Как сделать JProgressBar чтобы он работал на кнопку Jbutton и заканчивал работу после того как прогресс дошел до 100%?

198
Как правильно отобразить один item в RecyclerView?

Как правильно отобразить один item в RecyclerView?

Необходимо чтобы не весь список сразу отображался, а по очереди с 0 до listsize(), если пользователь свайпнул

145