3

私は Jhipster を初めて使用し、RestTemplate などを使用してゲートウェイ コードからマイクロサービスを手動で呼び出すことができるかどうか疑問に思っています。

私の最初のアイデアは、ゲートウェイ自体を呼び出すことでした...しかし、それが良い考えかどうかはわかりません。私の 2 番目のアイデアは、URL でサービスを呼び出してみることでした。私の懸念は、特定のノードのポートをハードコーディングしたくないということです。代わりに、適切な負荷分散を使用したいと考えています。

この記事https://dzone.com/articles/spring-cloud-rest-client-with-netflix-ribbon-basicを読みましたが、注入に失敗しました。

ビーン宣言を手動で追加する必要があることをどこかで読みました

@LoadBalanced
@Bean
RestTemplate restTemplate(){
    return new RestTemplate();
}

しかし今、私は実際のURIに苦労しています:ルートとして何を置くべきですか? (xxxxx)

final HcpVersionedhcp hcpVersionedhcp = 
            restTemplate.exchange("http://xxxxx/api/user-data/byLogin/", UserData.class);

ゲートウェイ application.yml にある唯一の構成は

ribbon:
eureka:
    enabled: true
4

1 に答える 1

6

「xxxxx」はサービス名に置き換える必要があります。サービスが「foo」の場合は、 と書く必要がありますhttp://foo/api/user...

JWT を認証として使用している場合は、JHipster でユーザーを使用して認証するか、可能であればリクエストから JWT トークンを渡す必要があります。ただし、これは JWT 認証のベスト プラクティスではないため、JHipster UAAを使用することをお勧めします。簡単に言えば、認証と認可を担当するサービスがもう 1 つあるということです。別のサービスからサービスにアクセスするには@AuthorizedFeignClient、JPA と同様にインターフェースで使用できます。

したがって、次のように定義します。

@AuthorizedFeignClient(name = "xxxx")
interface XxxClient {

   @RequestMapping(value = "/api/some-entities/{id}")
   SomeEntity getSomeEntityById(Long @Path("id") id);
}

そして、次のように任意のスプリング サービス/レスト コントローラーに挿入します。

@Inject
private XxxClient xxxClient;

//...

public void someAction() {
   //...
   xxxClient.getEntityById(id);
   //..
}

クライアント承認フローを内部的に実装するもの...

于 2016-10-01T09:33:10.470 に答える