CRecordGetMicroServiceInstance

This message is used when you need the address of an instance of a microservice.

This message belongs to the microservice registry API.

{
  "id": "ddadb3e0-98b9-4e59-849d-369b079cbc1d",
  "name": "GET_MICRO_SERVICE_INSTANCE",
  "isService": "false",
  "description": "Get the target address of the given microservice ID.\nIf more than one instance is registered, a random instance is chosen.",
  "slots": [
    {
      "key": "1",
      "name": "MICRO_SERVICE_ID",
      "direction": "REQUEST",
      "mandatory": "true",
      "type": "ID",
      "description": "The microservice to search for."
    },
    {
      "key": "2",
      "name": "OWNER",
      "direction": "ANSWER",
      "mandatory": "false",
      "type": "TARGET_ADDRESS",
      "description": "An address of the microservice."
    }
  ]
}

Example of use (after generating of the class CRecordGetMicroServiceInstance):

constructor:
    addMessageHandler(CRecordGetMicroServiceInstance.ID,
                      this::asyncGetInstance);

// request
private void getMicroServiceInstance(@NotNull final CTargetAddress aAddressOfMicroserviceRegistry,
                                     @NotNull final IId aMicroserviceId) throws CException
{
    final CEnvelope env = CEnvelope.forSingleTarget(aAddressOfMicroserviceRegistry);
    final CRecord rec = CRecordGetMicroServiceInstance.create();
    CRecordGetMicroServiceInstance.setMicroServiceId(rec,
                                                     aMicroserviceId);
    sendRequest(env,
                rec);
}

// handle answer
private boolean asyncGetInstance(@NotNull final CEnvelope aEnvelope,
                                 @NotNull final CRecord aRecord)
{
    if (aEnvelope.isAnswer())
    {
        if (aEnvelope.getResultCode() == CResultCode.SUCCESS)
        {
            final CTargetAddress address = CRecordGetMicroServiceInstance.getOwner(aRecord,
                                                                                   null);
            // ...
        }
        return true;
    }
    return false;
}