Как настроить Spring Sidecar с внутренним RestController и FeignClient - PullRequest
1 голос
/ 14 февраля 2020

У меня есть сценарий микроуслуг, в котором Sidecar (приложение с весенней загрузкой) отображает конечные точки веб-сервера python.

Сервер python прослушивает 5000 и выполняет вычисление, поэтому мы решили сопоставить его домашняя страница с префиксом «cal c» в URI, поэтому мы имеем следующую конфигурацию:

eureka:
  [omissis] #it works
sidecar:
   port: 5000
   health-uri: http://${sidecar.hostname}:${sidecar.port}/health.json
   home-page-uri: http://${sidecar.hostname}:${sidecar.port}/
   hostname: localhost
server:
  port: 2323
  servlet:
    context-path: /pye

zuul:
  routes:
      calc:
          url: localhost:5000/

Затем я представил новый контроллер REST внутри микросервиса Sidecar, то есть:

@RestController
@RequestMapping("git")
public class GitController {

@GetMapping("/")
public List<String> getBranchesAlias(@RequestHeader("Authorization") String oauth2Token,
        @RequestHeader(value = "OIDC_access_token", required = false) String oidAccessToken) {
        //returns a list of branches from a git repository
    return getBranches(oauth2Token, oidAccessToken);
   }
}

И, наконец, я написал FeignClient, который ДОЛЖЕН позволять мне вызывать конечные точки микросервиса из других микросервисов, например:

@FeignClient(name = "python-engine")
public interface PythonEngineClient {
@GetMapping(value = "/pye/git/", produces = MediaType.APPLICATION_JSON_VALUE)
List<String> getBranches(@RequestHeader("Authorization") String oauth2Token,
        @RequestHeader(value = "OIDC_access_token", required = false) String oidAccessToken);
}

То, что я получаю при вызове FeignClient, заключается в том, что URI, начинающиеся с "/ git "перенаправлены на localhost: / 5000 вместо localhost: / 2323 со следующим журналом:

DEBUG s.n.w.p.http.HttpURLConnection - sun.net.www.MessageHeader@647d9996 pairs: {GET /pye/git/branches HTTP/1.1: null}{Accept: application/json}{Authorization: Bearer [omissis] }{User-Agent: Java/1.8.0_232}{Host: localhost:5000}{Connection: keep-alive}
DEBUG s.n.w.p.http.HttpURLConnection - sun.net.www.MessageHeader@88037215 pairs: {null: HTTP/1.1 404 NOT FOUND}{Content-Length: 232}{Content-Type: text/html}{Date: Fri, 14 Feb 2020 08:53:49 GMT}{Server: waitress}
ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is 
feign.FeignException: status 404 reading PythonEngineClient#getBranches(String,String)] with root cause
feign.FeignException: status 404 reading PythonEngineClient#getBranches(String,String)
at feign.FeignException.errorStatus(FeignException.java:78)

Как мы видим в первой строке журнала, Host - это" localhost: 5000 ". Я хочу, чтобы вызов "/ git / **" НЕ перенаправлялся на python, а обслуживался RestController.

Как я могу получить это? Спасибо!

1 Ответ

0 голосов
/ 08 апреля 2020

Мое окончательное решение состоит в том, что это невозможно: Sidecar не может работать должным образом, если также вставить RestController.

...