我开发了一种称为smartrule微服务的微服务。 我找到: http://www.cumulocity.com/guides/reference/microservice-runtime#Access-to-the-platform-and-other-microservices
但是,这不能解决微服务是否下标给另一个租户的问题。这意味着不能使用基本网址。
我想出了以下解决方案,它正在工作,但是我想问是否有更好的方法?我还看到了建立与实际租户不同的URL的风险。我记得在Cumulocity培训中,URL模式可能会有所不同,并且承租人在所反映的URL中一定不能准确!也许Microservice SDK可以更好地支持在上下文中调用另一个微服务器?
private boolean callSmartRuleService(SmartRuleRepresentation requestBody, String groupId) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.AUTHORIZATION, "Basic " + getBase64Credentials(contextService.getContext().getUsername(), contextService.getContext().getPassword()));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<SmartRuleRepresentation> requestEntity = new HttpEntity<>(requestBody, headers);
StringBuilder urlBuilder = new StringBuilder();
urlBuilder.append("https://")
.append(contextService.getContext().getTenant())
.append(c8yBaseURL.substring(c8yBaseURL.indexOf(".", 8)))
.append("/service/smartrule/managedObjects/")
.append(groupId).append("/smartrules");
ResponseEntity<String> response = restTemplate.exchange(urlBuilder.toString(), HttpMethod.POST, requestEntity, String.class);
if (response.getStatusCode().is2xxSuccessful()) {
return true;
} else
return false;
}
答案 0 :(得分:1)
您不应尝试构建自己的URL。只需将其发送到微服务中环境变量提供的baseURL即可。
您只需要将租户包括在凭据中(租户/用户名:密码)。然后,Cumulocity将注意在正确的租户上下文中对其进行处理。当承租人作为凭证的一部分被传递时,Cumulocity将始终根据该构图建立上下文(与域无关)。
当您与另一个微服务交谈时,请记住,租户可能没有此微服务,或者该微服务无法访问/崩溃。您的服务应该能够处理这些情况。