【问题标题】:jhipster gateway in container can not zuul to microservice running in localhost容器中的 jhipster 网关无法 zuul 到在 localhost 中运行的微服务
【发布时间】:2020-05-11 22:35:38
【问题描述】:

我有一个问题,我使用 jhipster 生成 3 个微服务:网关、UAA 和赌博生产者。 当我使用 docker-compose 一起运行 3 个服务时,它运行良好,然后我停止赌博生产者服务并在 localhost 上运行 ./mvnw 以获取该服务,一起工作时它不起作用。网关不能zuul这个服务

我尝试了一些案例:

  • 请勿编辑上述 3 个服务的任何 application.yaml、applicaton-dev.yml 配置文件。
  • 在网关 applicaton.yml 上:
   routes:
    gamblingproducer:
      url: http://localhost:8081

或者

 routes:
    gamblingproducer:
      path: services/gamblingproducer/**
      serviceId: gamblingproducer

抛出异常:Connect to localhost:8081 [localhost/127.0.0.1] failed: Connection refused (Connection refused)

gateway_1  | com.netflix.zuul.exception.ZuulException: Forwarding error
gateway_1  |    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.handleException(SimpleHostRoutingFilter.java:261)
gateway_1  |    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.run(SimpleHostRoutingFilter.java:241)
gateway_1  |    at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117)
gateway_1  |    at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193)
gateway_1  |    at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157)
gateway_1  |    at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118)
gateway_1  |    at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96)
gateway_1  |    at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116)
gateway_1  |    at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81)
gateway_1  |    at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:166)
gateway_1  |    at org.springframework.cloud.netflix.zuul.web.ZuulController.handleRequest(ZuulController.java:45)
gateway_1  |    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
gateway_1  |    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
gateway_1  |    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
gateway_1  |    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
gateway_1  |    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
gateway_1  |    at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
gateway_1  |    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
gateway_1  |    at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
gateway_1  |    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:88)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
gateway_1  |    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
gateway_1  |    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:180)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at microservices.gateway.web.filter.RefreshTokenFilter.doFilter(RefreshTokenFilter.java:62)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:97)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:74)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
gateway_1  |    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
gateway_1  |    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
gateway_1  |    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
gateway_1  |    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:114)
gateway_1  |    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:104)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
gateway_1  |    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
gateway_1  |    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
gateway_1  |    at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
gateway_1  |    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
gateway_1  |    at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
gateway_1  |    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
gateway_1  |    at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
gateway_1  |    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
gateway_1  |    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
gateway_1  |    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
gateway_1  |    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
gateway_1  |    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
gateway_1  |    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
gateway_1  |    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
gateway_1  |    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
gateway_1  |    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
gateway_1  |    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
gateway_1  |    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
gateway_1  |    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
gateway_1  |    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)
gateway_1  |    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376)
gateway_1  |    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
gateway_1  |    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
gateway_1  |    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
gateway_1  |    at java.lang.Thread.run(Thread.java:748)
gateway_1  | Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:8081 [localhost/127.0.0.1] failed: Connection refused (Connection refused)
gateway_1  |    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
gateway_1  |    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374)
gateway_1  |    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
gateway_1  |    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
gateway_1  |    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
gateway_1  |    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
gateway_1  |    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
gateway_1  |    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:118)
gateway_1  |    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.forwardRequest(SimpleHostRoutingFilter.java:422)
gateway_1  |    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.forward(SimpleHostRoutingFilter.java:341)
gateway_1  |    at org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter.run(SimpleHostRoutingFilter.java:236)
gateway_1  |    ... 116 common frames omitted
gateway_1  | Caused by: java.net.ConnectException: Connection refused (Connection refused)
gateway_1  |    at java.net.PlainSocketImpl.socketConnect(Native Method)
gateway_1  |    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
gateway_1  |    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
gateway_1  |    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
gateway_1  |    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
gateway_1  |    at java.net.Socket.connect(Socket.java:589)
gateway_1  |    at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
gateway_1  |    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
gateway_1  |    ... 126 common frames omitted
gateway_1  | 

请帮帮我 谢谢

【问题讨论】:

  • 你使用哪个服务发现?
  • 尤里卡客户,兄弟
  • 那为什么要定义静态zuul路由呢?您是否在 jhipster 注册表中查看了您注册的 eureka 客户端?他们是否续签了租约?
  • 1.我定义了静态 zuul 路由器,因为我看到当服务运行时,它显示在本地和外部。这就是为什么我想尝试一些案例 2。他们都注册了 3。是的,他们有 This is my eureka` eureka: instance: prefer-ip-address: true client: service-url: defaultZone: admin:${ jhipster.registry.password}@localhost:8761/eureka/`。我正在使用MacOs。谢谢
  • 当我使用 ./mvnw 在本地主机上运行赌博生产者时。我看到了一些不对劲的地方。这对于部署来说是不好的信号,毕竟它部署好了`任务主管超时 java.util.concurrent.TimeoutException: null at java.util.concurrent.FutureTask.get(FutureTask.java:205)` .... 但是当我大摇大摆地切换到此服务时,它会在上面显示消息ZuulException: Forwarding error

标签: docker containers jhipster gateway


【解决方案1】:

Localhost 始终解析为 127.0.0.1,即容器本身。将 localhost 更改为运行 eureka 的主机 ip 或容器/服务名称,但切勿使用 localhost。想想容器中的应用程序,因为它们在分离的、遥远的主机上运行。除非您想循环回同一个容器(几乎不会发生),否则切勿使用 localhost。

更新:

根据 cmets 部分,就像我说的那样,问题出在“本地主机”及其处理方式上。据我了解,场景如下所示:主机上的 mvnw 正在连接到 docker 中的 eureka 说:“嗨,我是 mnvw,你可以在 localhost:8081 上与我联系”。但是尤里卡在尝试验证时调用 localhost 而不是您的主机,它会获取尤里卡的 localhost,它是容器。因此,解决您的问题的方法是让 mnvw 说出 eureka 容器可以找到的主机名(或 ip),而不是 localhost。当涉及到容器时,使用 localhost 非常棘手,所以请注意!

【讨论】:

  • 我知道。我已经尝试过了,但它不起作用。 IP 地址和服务名称。
  • 请发布您的 docker-compose 文件。您是在使用 docker-compose up 还是在 docker swarm 中运行/部署?
  • 请在运行 docker-compose 后查看github.com/lebabach/gambling-producer/blob/master/src/main/… 的 docker-compose 文件,您可以在 localhost 上从该服务运行 ./mvnw。当我们从 localhost:8080(网关)上的 swagger 访问时它不起作用
  • 澄清一下 - mvnw 是您的应用程序,在主机 (?) 上执行,您希望被 eureka 发现(在 docker 中运行,没有暴露端口),因此可以通过运行在带有外部端口 8080 的 docker?
  • 是的。你说得对。我不擅长docker。我不知道我是否应该在 docker compose 上进行更多配置,例如暴露端口 blahblah。请帮我。谢谢你的回复
猜你喜欢
  • 2019-09-18
  • 2021-02-01
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2018-12-31
  • 2018-06-28
  • 1970-01-01
  • 2021-02-02
相关资源
最近更新 更多