我是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);
我的网关application.yml中唯一的配置是
ribbon:
eureka:
enabled: true
答案 0 :(得分:5)
必须使用您的服务名称替换“xxxxx”。如果您的服务是“foo”,则应撰写http://foo/api/user...
。
如果您使用JWT作为身份验证,则需要在JHipster中使用用户a进行身份验证,或者尽可能从请求中传递JWT令牌。然而,这不是JWT auth的最佳实践,所以我建议采用JHipster UAA方式。
简而言之,您还有一项服务负责身份验证和授权。要从其他服务访问您的服务,您可以在接口上使用@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);
//..
}
在内部实现客户端授权流程......