java - Apiman 不恢复网关

标签 java docker kubernetes ibm-api-management apiman

您能帮我解决以下问题吗? 我使用Apiman版本1.2.1

FROM jboss/wildfly:9.0.2.Final
ENV APIMAN_VERSION 1.2.1.Final

我通过 kubernetes 公开此版本,作为持久卷,我在同一容器中使用 postgres。一旦我第一次创建它,之后在 apiman 中我添加了 Organization/API/.... 以及所有必要的人员。

我按下按钮来发布 api,并且可能会检查它是否正常工作,因此我使用 kubectl port-forward pod-name 8080:8080 并可能通过浏览器检查我的网关 http :localhost:8080/apiman-gateway/ORgId/bla/bla/bla/bla?givemedescriptionbyid=1

在此之后,我进入控制台并杀死 apiman pod,由于 pod 重新启动,相同的操作 kubectl port-forward new-pod-name 8080:8080,我可以看到apiman 的所有数据(如组织、api 和所有其他人员)都已存在。

但是一个大问题是,如果您尝试再次调用网关,它会告诉您:

{"responseCode":500,"message":"API not found.","trace":"io.apiman.gateway.engine.beans.exceptions.InvalidApiException: API not found.\n\tat io.apiman.gateway.engine.impl.ApiRequestExecutorImpl$3.handle(ApiRequestExecutorImpl.java:278)\n\tat io.apiman.gateway.engine.impl.ApiRequestExecutorImpl$3.handle(ApiRequestExecutorImpl.java:271)\n\tat io.apiman.gateway.engine.impl.SecureRegistryWrapper$1.handle(SecureRegistryWrapper.java:122)\n\tat io.apiman.gateway.engine.impl.SecureRegistryWrapper$1.handle(SecureRegistryWrapper.java:111)\n\tat io.apiman.gateway.engine.es.CachingESRegistry.getApi(CachingESRegistry.java:116)\n\tat io.apiman.gateway.engine.impl.SecureRegistryWrapper.getApi(SecureRegistryWrapper.java:111)\n\tat io.apiman.gateway.engine.impl.ApiRequestExecutorImpl.execute(ApiRequestExecutorImpl.java:270)\n\tat io.apiman.gateway.platforms.servlet.GatewayServlet.doAction(GatewayServlet.java:232)\n\tat io.apiman.gateway.platforms.servlet.GatewayServlet.doGet(GatewayServlet.java:77)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:687)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\n\tat io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86)\n\tat io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)\n\tat io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)\n\tat org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)\n\tat io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)\n\tat io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)\n\tat io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)\n\tat io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)\n\tat io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)\n\tat io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)\n\tat io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)\n\tat io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)\n\tat io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)\n\tat io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)\n\tat java.lang.Thread.run(Thread.java:745)\n"}

我可以看到,根据 api 管理器中的调用指标,我的所有调用都可以到达 apiman-gateway,但我收到 500 响应代码。

最佳答案

如果有人遇到这样的错误,那么,我已经通过以下步骤解决了它,首先我们只需要使用新版本的 APIMAN,已实现的修复列表。而且 apiman-gateway 也无法在没有 Elastic Search 自行恢复的情况下生存。因此应该提供elasticsearch配置。

关于java - Apiman 不恢复网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43261911/

相关文章:

java Generic<T> 与 Generic 相同吗?

java - 为什么包含值返回 false?

java - 如何在不重新启动广播接收器的情况下将信息从广播接收器发送回我的主要 Activity

docker - 如何区分Dockerfile中的Build和Run?

docker - 如何在没有互联网和内网 yum 存储库的情况下安装 docker-ce?

kubernetes - 从 Service 访问 pod localhost

proxy - 根据响应位置 header 重写HTTP请求-Istio

Java CDI 拦截器无法使用 WELD 运行 Web 应用程序

docker - 找不到所需的文件

kubernetes - 如何在多容器容器中更新容器图像