我有几个spring引导微服务,它们通过云环境部署到JBoss。这些引导服务是Eureka客户端,它将自己注册到Eureka服务器。以下是一个例子:zuul eureka服务id重定向
eureka:
client:
healthcheck:
enabled: true
serviceUrl:
defaultZone: ${DISCOVERY_URL:http://localhost:8761}/eureka/
instance:
ip-address: 127.0.0.1
appname: user-regn-service-app
home-page-url-path: /user-regn-service-app
它注册的应用与尤里卡名称为用户REGN服务,应用 Eureka Homepage
的wildfly服务器在8080上运行和用户REGN服务,应用程序部署在上下文路径/ user-regn-service-app中。 所以REST API是如下
localhost:8080/user-regn-service-app/regnUser
当我使用zuul作为API网关的配置是如下
zuul:
prefix: /api
routes:
test:
path: /test/**
service-id: USER-REGN-SERVICE-APP
strip-prefix: true
ribbon:
eureka:
enabled: true
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
registerWithEureka: false
但每当我正在调用zuul API网关是无法识别上下文路径并重定向到localhost:8080而不是localhost:8080/user-regn-service-app。
http://localhost:8765/api/
- > 404未找到
http://localhost:8765/api/user-regn-service-app/
- > Wildfly默认主页
http://localhost:8765/api/user-regn-service-app/user-regn-service-app/regnUser
- >重定向到用户注册。
预期行为:http://localhost:8765/api/test/regnUser
应该重定向到用户注册。
我几乎尝试了所有从Zuul和Eureka之间的博客中获得的组合,以完成以下工作,但没有运气。请提醒我是否缺少一些东西。
我已经尝试使用自定义zuul自定义筛选器,但它不会转发到必需的上下文路径。代码是如下
@Component
public class ZuulApiFilter extends ZuulFilter{
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
System.out.println("original"+ ctx.get("requestURI"));
HttpServletRequest request = ctx.getRequest();
String requestURI = request.getRequestURI();
String contextAwareURI=requestURI.concat("user-regn-service-app/");
ctx.set("requestURI", contextAwareURI);
return null;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public int filterOrder() {
return 1;
}
@Override
public String filterType() {
return "pre";
}
}
的requestURI设定新的URI以及 ctx.set( “requestURI”,contextAwareURI)后不改变; request.getRequestURI();仅显示旧的请求URI。
如果我让假我可以访问以下 的http://本地主机:8765/API /用户REGN服务,应用程序/ - > Wildfly主页 的http://本地主机:8765/API /用户REGN服务,应用/用户REGN服务,应用程序/ userRegn - >服务 不知道任何配置丢失 –
这是混乱的,您使用JBoss和WebLogic的? 如果API在'监听localhost:8080'以及使用应用程序上下文'用户REGN服务,app'这意味着请求应被发送到'HTTP://本地主机:8080 /用户REGN服务,应用程序/ <资源>'。 stripPrefix被设置为真,如果API(未Zuul服务)的上下文路径设置为/ – ootero
很抱歉的混乱,我使用JBoss Wildfly此服务和它部署在上下文根/用户REGN自行修理应用在8080 的http://本地主机:8080 /用户REGN服务,应用程序/ <资源>工作正常,但zuul无法重定向到指定的服务。我在配置中丢失了什么? –