累积微服务间通信最佳实践

时间:2018-09-22 11:33:41

标签: cumulocity

我开发了一种称为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;
}

1 个答案:

答案 0 :(得分:1)

您不应尝试构建自己的URL。只需将其发送到微服务中环境变量提供的baseURL即可。

您只需要将租户包括在凭据中(租户/用户名:密码)。然后,Cumulocity将注意在正确的租户上下文中对其进行处理。当承租人作为凭证的一部分被传递时,Cumulocity将始终根据该构图建立上下文(与域无关)。

当您与另一个微服务交谈时,请记住,租户可能没有此微服务,或者该微服务无法访问/崩溃。您的服务应该能够处理这些情况。