Cumulocity Межмикросервисная коммуникация, лучшая практика - PullRequest
0 голосов
/ 22 сентября 2018

Я разработал микросервис, который называется микросервис 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;
}

1 Ответ

0 голосов
/ 23 сентября 2018

Вы не должны пытаться создать свой собственный URL.Просто отправьте в baseURL, предоставленный переменными среды в вашем микросервисе.

Вам просто нужно включить арендатора в учетные данные (tenant / username: password).Тогда Cumulocity позаботится о том, чтобы он обрабатывался в правильном контексте клиента.Когда арендатор передается как часть учетных данных, Cumulocity всегда строит контекст из этого (независимо от домена).

Имейте в виду, когда говорите с другим микросервисом, что арендатор, возможно, не имеет этого микросервиса иличто микросервис недоступен / не работает и т. д. Ваша служба должна быть в состоянии справиться с этими ситуациями.

...