Обновление Swagger ломает Spring Cloud (Эврика, Зуул, Лента)

У меня есть два приложения Spring Boot, одно из которых действует как обратный прокси-сервер для другого. Я использую Spring Boot (1.4.1.RELEASE), Spring Cloud (Camden.SR1). Я использовал Swagger 2.5.0 и все работает как положено. Мое приложение BootA, которое размещает сервер Eureka и содержит сопоставления Zuul, успешно перенаправляет полученные запросы в приложение BootB.

Однако, если я обновлю Swagger до 2.6.0, все пойдет не так. Прежде всего, когда я смотрю на панель инструментов Eureka, приложение BootB отображается как "Неизвестно". Действительно, в моем application.properties для BootB я не определил имя eureka.instance.appname. Если я определю это в приложении BootB application.properties, приложение будет отображаться в Eureka Dashboard правильно. Тем не менее, Балансировщик нагрузки, используемый Zuul, не может найти сервер BootB. Я получаю исключение ZuulException (ошибка пересылки), которое вызвано клиентским исключением из клиента netflix

2016-11-03 14:09:095.80 [http-nio-9080-exec-10] WARN [SendErrorFilter] Ошибка при фильтрации com.netflix.zuul.exception.ZuulException: ошибка пересылки в org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter..filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:84) по адресу com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112) по адресу com.netflix.zuul.FilterProcessor.processZuulFilter(zibul.FilterProcessor.processZuulFilter) com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157) на com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118) на com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96) на com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116) на com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81) на org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:157) в org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequestInternal(ZuulController.java:pr.rab.web.handleRequest(AbstractController.java:174) в org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50) в org.springframework.web.servlet.DispatcherServlet (orvlet)..springframework.web.servlet.DispatcherServlet..java:861) по адресу javax.servlet.http.HttpServlet.service(HttpServlet.java:622) по адресу org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) по адресу javax.servlet.pert.htp служба (HttpServlet.java:729) в организации.apache.catalina.core. (WsFilter.java:52) по адресу org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) по адресу org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChaing. web.servlet.resource.ResourceUrlEncodingFilter. Java: 192) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) в org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilter.ternal(ApplicationContext) orF.springframework.web.filter.OncePerRequestFilter..java: 165) в org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105) в org.springframework.web.filter.OncePerRequestFilter.doFilter:F). catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:192) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) в org.springframework. Java: 317) в org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java:127) в org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilt er (FilterSecurityInterceptor.java:91) в org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) в org.springframework.security.web.access.ExceptionTranslationFil по адресу org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) по адресу org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFircy.pr_service) org.base.jf.FilterChainProxy..java: 331) на org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter.java:169) на org.springframework.secu rity.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:331) в org.springframework.security.web.savedrequest. doFilter (FilterChainProxy.java:331) в org.springframework.security.web.authentication. в org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter.java:121) в org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.rag.rag.jpg) или Filter.ha33Proxy..web.header.HeaderWriterFilter.doFilterInternal (HeaderWriterFilter.java:66) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) в org.springframe rity.web.FilterChainProxy. doFilter (FilterChainProxy.java:331) по адресу org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter.java:105) по адресу org.springframework.security.web.FavaShain.FilterChainChaha в org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter.java:56) в org.springframework.web.filter.OncePerRequestava..web.FilterChainProxy $ VirtualFilterChain.doFilter (FilterChainProxy.java:331) в org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) в org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) в org.springframework.web.filter.DelegatingFilkeProf..springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) при org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 165) по адресу org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) по адресу org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequest:apache.j.c). lina.core. OAuth2ClientContextFilter.java:60) по адресу org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) по адресу org.apache.catalina.core.ApplicationFilterChain.doFilter: веб-приложение для файловой системы (приложение к приложению).filter.HttpPutFormContentFilter.) в org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) в org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.j::: org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:19apilFalcat.Falter.Cat.FF) в org ApplicationFilterChain.java:165) в org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) в org.springframework.web.filter.OncePerRequestFilteriler.core.ApplicationFilterChain.: 107) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.javag: 19) catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:165) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) в org.apache.catalina.core. 108) по адресу org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) по адресу org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) по адресу org.apache.catalveror.invoke(ErrorReportValve.java:79) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.javag:349) apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) в org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) в org.apache.coyote.AbstractProtocol$ConnectionHandler.pro $ (Abstractava.process):802) в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.conExol Worker.run(ThreadPoolExecutor.java:617) в org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) в java.lang.Thread.run(Thread.java:745), вызванный: com.netflix.client.ClientException: балансировщик нагрузки не имеет доступного сервера для клиента: BootB на com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:468) на com.netflix.loadbalancer.reancer. (LoadBalancerCommand.java:184) по адресу com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) по адресу rx.internal.ubpack.cat. (OnSubscribeConcatMap.java:94) по адресу rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) по адресу rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127) по адресу rx.internal.scheduleurchecheduler java:73) по адресу rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) по адресу rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRic_Winter_Rate_RatePort) $ SourceSubscriber.onNext (OperatorRetryWithPredicate.java:45) по адресу rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) по адресу rx.Subscriber.setternal.ber ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) в rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.j:: в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLiftj. OnSubscribeLiftj.) в rx.Observable.subscribe(Observable.java:10307) в rx.Observable.subscribe(Observable.java:10274) в rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:445) в rx.observables.BlockingObserv.s (BlockingObservable.java:342) по адресу com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:102) по адресу com.netflix.client.AbstractLoadBliveWare zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:88) в org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:42) в com.netflix.hystrix.HystrixCommand$2.call(Hymand. Hyund. $ 2.call. Java:301) на com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:297) на rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) на rx.internal.operators.OnSuballDefer OnSubscribeDefer.java:35) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) в rx.internal.operators.OnSubscribe (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribe вызов (OnSubscribeLift.java:30) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) по адресу rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) по адресу rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call (Onjub:30L) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) по адресу rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) по адресу rx.internal.operators.OnSubscribeDoOnEach.call (OnSub). Observable.unsafeSubscribe (Observable.java:10211) по адресу rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) по адресу rx.internal.operators.OnSubscribeDoOnEach.call (OnSubscribeDoOternal.oEn.ach.OnSubscribeLift.call (OnSubscribeLift.java:48) по адресу rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) по адресу rx.internal.oub ом. вызов (OnSubscribeDoOnEach.java:41) по адресу rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) в rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) в rx.internal.operators.OnSubscribeDoOnEach.call (onSubx).unsafeSubscribe (Observable.java:10211) на rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) на rx.internal.operators.OnSubscribeDoOnEach.call (OnSubscribeDoOnEach.j. OnSubscribeLift.call (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) в rx.Observable.unsafeSubscribe(Observable.java:10211) в rx.internal.operators.Ontors.Ontors. (OnSubscribeDefer.java:51) по адресу rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) по адресу rx.Observable.unsafeSubscribe(Observable.java:10211) по адресу rx.internal.operators.OnSubapSubscribeSap Java: 48) в rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) в rx.Observable.unsafeSubscribe (Obse rvable.java:10211) в rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) в rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) в rx. (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) в rx.Observable.unsafeSubscribe(Observable.java:10211) в rx.internal.operators.OnSubscribeDoOnEach.call java: 41) на rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) на rx.Observable.unsafeSubscribe(Observable.java:10211) на rx.internal.operators.OnSubscribeDefer.callefer.call) в rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) в rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:48) в rx.internal.operators.OnSubscribeLift.call (OnSscribe 30) в rx.Observable.subscribe(Observable.java:10307) в rx.Observable.subscribe(Observable.java:10274) в rx.internal.operators.BlockingOperatorToFuture.toFuture(BlockingOperatorToFuture.java:51) в rx.observables.BlockingObservable.toFuture(BlockingObservable.java:412) в com.netflix.hystrix.HystrixCommand.queue(HystrixCommand.hyavaf77):.HystrixCommand.execute(HystrixCommand.java:343) в org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:133) ... 112 общих кадров опущено

Я работал с компонентами netflix в отладке, и я не вижу упоминания о сервере BootB при использовании Swagger 2.6.0, но я вижу, что он обнаружен в более старой версии.

Хотя я хотел бы получить некоторые исправления ошибок в Swagger, это помешало бы мне его использовать. Назначение имени eureka.instance.appname звучит так, как будто я лечу симптом. Может кто-нибудь указать мне правильное направление для совместной работы этих компонентов? На первый взгляд, я не понимаю, почему Swagger может повлиять на Zuul, но я изо всех сил пытаюсь найти причину. Спасибо за любую помощь.

0 ответов

Другие вопросы по тегам