如何从JHIPSTER网关存储库或服务手动调用微服务



我是Jhipster的新手,想知道是否可以使用RestTemplate或其他东西从网关代码手动调用微服务。

我的第一个想法是调用网关本身…但我不确定这是个好主意。我的第二个想法是尝试通过URL调用服务。我担心的是,我不想硬编码给定节点的端口。相反,我想使用适当的负载均衡。

我已经阅读了这篇文章https://dzone.com/articles/spring-cloud-rest-client-with-netflix-ribbon-basic,但是注射失败了。

我在其他地方读到,您现在需要手动添加bean声明

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

但是现在我正在与实际的URI作斗争:我应该把什么作为根?(xxxxx)

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

网关应用程序中唯一的配置。yml是

ribbon:
eureka:
    enabled: true

必须将"xxxxx"替换为您的服务名称。如果你的服务是"foo",你应该写http://foo/api/user... .

如果使用JWT作为身份验证,则需要使用JHipster中的用户a进行身份验证,或者在可能的情况下从请求传递JWT令牌。然而,这并不是JWT认证的最佳实践,所以我建议采用JHipster UAA方式。简而言之,您多了一个负责身份验证和授权的服务。要从另一个服务访问您的服务,您可以在接口上使用@AuthorizedFeignClient,类似于JPA。

所以你定义:

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

并像这样注入到任何spring service/rest-controller中:

@Inject
private XxxClient xxxClient;
//...
public void someAction() {
   //...
   xxxClient.getEntityById(id);
   //..
}

最新更新