Я разработал микросервис, который называется микросервис smartrule.Я обнаружил, что: http://www.cumulocity.com/guides/reference/microservice-runtime#Access-to-the-platform-and-other-microservices
Однако это не решает проблему, если микросервисы подписываются на другого арендатора.Это означает, что базовый URL не может быть использован для этого.
Я придумала следующее решение, оно работает, но я бы спросила, есть ли лучший подход?Я также вижу риск создания 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;
}