J'ai quelques microservices de démarrage à ressort, qui sont déployés dans JBoss sur un environnement cloud. Ces services de démarrage sont des clients Eureka qui s'enregistrent sur le serveur Eureka. Voici un exemple:zuul eureka service id redirection
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
Il enregistre l'application avec Eureka avec le nom d'utilisateur-regn-service app Eureka Homepage
Le serveur wildfly fonctionne à 8080 et l'utilisateur-regn-service-app est déployé sur le chemin du contexte/user-regn-service-app. Donc, le reste api est comme ci-dessous
localhost:8080/user-regn-service-app/regnUser
Lorsque j'utilise Zuul comme passerelle api, la configuration est comme ci-dessous
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
Mais chaque fois que je fais appel à la passerelle Zuul api il est incapable de Reconnaître le chemin du contexte et redirige vers localhost: 8080 au lieu de localhost: 8080/user-regn-service-app.
http://localhost:8765/api/
-> 404 not found
http://localhost:8765/api/user-regn-service-app/
-> wildfly page d'accueil par défaut
http://localhost:8765/api/user-regn-service-app/user-regn-service-app/regnUser
-> Redirige à l'enregistrement de l'utilisateur.
Comportement attendu: http://localhost:8765/api/test/regnUser
doit rediriger vers l'enregistrement de l'utilisateur.
J'ai presque essayé toutes les combinaisons que j'ai reçues des blogs entre Zuul et Eureka pour faire ce qui suit mais pas de chance. Veuillez aviser s'il me manque quelque chose.
J'ai essayé d'utiliser le filtre personnalisé zuul personnalisé comme ci-dessous, mais il ne transmet pas au chemin Context requis. Le code est comme ci-dessous
@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";
}
}
Le requestURI ne pas modifications après avoir réglé la nouvelle URI et ctx.set ("requestURI", contextAwareURI); request.getRequestURI(); affiche uniquement l'ancienne URI de demande.
Si je fais fausse je peux accéder au-dessous http: // localhost: 8765/api/user-regn-service app/-> wildfly page d'accueil http: // localhost: 8765/api/user- regn-service-app/utilisateur-regn-service-app/userRegn -> Service Vous ne savez pas si une config est manquante –
Ceci est déroutant, utilisez-vous JBoss et Weblogic? Si l'API écoute 'localhost: 8080' et utilise également le contexte d'application' user-regn-service-app', cela signifie que les requêtes doivent être envoyées à 'http: // localhost: 8080/user-regn-service-app/ '. stripPrefix est défini sur true si le chemin d'accès au contexte de l'API (pas le service Zuul) est défini sur/ –
ootero
Désolé pour la confusion, j'utilise Jboss Wildfly pour ce service et il est déployé à la racine de contexte/user-regn-service- application à 8080. http: // localhost: 8080/utilisateur-regn-service-app/ fonctionne bien, mais zuul est incapable de rediriger vers le service donné. Ai-je manqué quelque chose dans la config? –