Сопоставление URL-адресов Zuul с весенней загрузкой, Eureka

Я создаю Rest api с использованием микросервисной архитектуры. У меня есть несколько API для пользователей, которые мы превратили в несколько проектов. У меня все готово, за исключением того, что я не могу сопоставить URL-адрес пользователя с URL-адресом приложения в zuul.

URL-адрес пользователя: user / v1 / accountholder / {id} / cards, а фактический URL-адрес для моего приложения: / user-cards / v1 / accountholder / {id} / cards.

Здесь id - это переменная пути. Ниже приведены другие похожие URL-адреса API, поэтому, если есть способ настроить их в целом в zuul. Корень контекста URL-адреса приложения также является именем проекта в Eureka.

Other similar urls are:

client side:- /user/v1/accountholders/{id}/cards/{cardid}
application:- /user-cards/v1/accountholders/{id}/cards/{cardid}

client side:- /user/v1/accountholders
application:- /user-cardholder/v1/accountholder

client side:- /user/v1/accountholders
application:- /user-cardholder/v1/accountholder

client side:- /user/v1/accountholders/{id}
application:- /user-cardholder/v1/accountholders/{id}

client side:- /user/v1/accountholders/{id}/accounts
application:- /user-accounts/v1/accountholders/{id}/accounts

client side:- /user/v1/accountholders/{id}/accounts/{accid}
application:- /user-accounts/v1/accountholders/{id}/accounts/{accid}

Нужна помощь, чтобы настроить это в свойствах или файле yml для zuul. Я пока не смог добиться какого-либо прогресса с картографированием. Любые комментарии будут полезны.

РЕШЕНО: - После получения ввода от @Daniel (который является принятым ответом) Это то, что я использовал в конфигурации zuul: -

zuul:
 routes:
   User-Cards: 
        path: /user/v1/accountholders/*/cards/**
        url: http://desktop-uvkv1ed:9999/user-cards/v1/accountholders
   User-Transactions1: 
        path: /user/v1/accountholders/*/transactions
        url: http://desktop-uvkv1ed:5555/user-transactions/v1/accountholders
        service-id: User-Transactions
   User-Transactions2:  
        path: /user/v1/accountholders/*/accounts/*/transactions
        url: http://desktop-uvkv1ed:5555/user-transactions/v1/accountholders
        service-id: User-Transactions
   User-Accounts: 
        path: /user/v1/accountholders/*/accounts/**
        url: http://desktop-uvkv1ed:7777/user-accounts/v1/accountholders
   User-Cardholders: 
        path: /user/v1/accountholders/**
        url: http://desktop-uvkv1ed:8888/user-cardholders/v1/accountholders

person Grinish Nepal    schedule 15.12.2015    source источник
comment
На первый взгляд, я не думаю, что в настоящее время возможно то, что вы хотите, хотя запрос на вытягивание для поддержки регулярных выражений в сопоставлениях должен появиться в ближайшее время. github.com/spring-cloud/spring-cloud-netflix/pull/ 699   -  person spencergibb    schedule 16.12.2015
comment
Можете ли вы помочь мне с подходом, который я могу использовать, я могу играть с URL-адресом приложения, но не с URL-адресом пользователя, чтобы я мог легко выполнить сопоставление.   -  person Grinish Nepal    schedule 16.12.2015
comment
@spencergibb На самом деле это возможно, потому что по сути все восходит к подклассу AbstractUrlMappingHandler, который поддерживает сопоставление с образцом в стиле муравьев.   -  person daniel.eichten    schedule 17.12.2015


Ответы (1)


Можно добиться того, что вы пытаетесь сделать, предоставив правильный конфиг Zuul. Предположим, у вас есть служба пользователя-держателя карты, работающая на порту 8081, и служба учетной записи пользователя на 8082, чтобы вы могли успешно отвечать на запросы, идущие против:

http://localhost:8081/user-cardholder/accountholders/{id} 
http://localhost:8082/user-account/accountholders/{id}/accounts/{accid}

Если это работает, вы можете добиться того, что вы пытаетесь использовать для этих двух служб, используя следующую конфигурацию zuul:

zuul:
  routes:
    cardholder:
      path: /user/accountholders/*
      url: http://localhost:8081/user-cardholder/accountholders/
    account:
      path: /user/accountholders/*/accounts/**
      url: http://localhost:8082/user-accounts/accountholders/

К сожалению, вам также придется добавить больше конфигураций - даже если они противоречат одной и той же серверной службе - из-за того, что внутренние и внешние URL-адреса различаются. В противном случае вы могли бы просто добавить опцию stripPrefix: false и использовать ее внутри и снаружи.

person daniel.eichten    schedule 16.12.2015
comment
Спасибо Даниил .. Это очень помогло - person Grinish Nepal; 17.12.2015