gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:57:26 24 4
gpt4 key购买 nike

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

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

我读过这篇文章 https://dzone.com/articles/spring-cloud-rest-client-with-netflix-ribbon-basic , 但注入(inject)失败。

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

@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

最佳答案

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

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

所以你定义:

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

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

然后像这样将它注入(inject)到任何 spring 服务/rest-controller 中:

@Inject
private XxxClient xxxClient;

//...

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

在内部实现客户端授权流程...

关于spring - 如何从 JHIPSTER 网关存储库或服务手动调用微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39792063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com