CRecordGetMicroServiceInstances
This message is used when you need one instance of each of the specified microservices.
This message belongs to the microservice registry API.
{
"id": "c5557e3e-2a2c-45c7-89b5-39d9286d317b",
"name": "GET_MICRO_SERVICE_INSTANCES",
"isService": "false",
"description": "Get the target addresses of the given microservice IDs.\nIf more than one instance is registered, random instance are chosen.",
"slots": [
{
"key": "1",
"name": "MICRO_SERVICE_IDS",
"direction": "REQUEST",
"mandatory": "true",
"type": "ID_ARRAY",
"description": "The microservices to search for."
},
{
"key": "2",
"name": "MICRO_SERVICE_INSTANCES",
"direction": "ANSWER",
"mandatory": "false",
"type": "RECORD_ARRAY",
"description": "The instances of the given microservices."
}
]
}
Example of use (after generating of the class CRecordGetMicroServiceInstances):
// in constructor:
addMessageHandler(CRecordGetMicroServiceInstances.ID,
this::asyncGetInstances);
// request
private void getMicroServiceInstances(@NotNull final CTargetAddress aAddressOfMicroserviceRegistry,
@NotNull final IId[] aMicroserviceIds) throws CException
{
final CEnvelope env = CEnvelope.forSingleTarget(aAddressOfMicroserviceRegistry);
final CRecord rec = CRecordGetMicroServiceInstances.create();
CRecordGetMicroServiceInstances.setMicroServiceIds(rec,
aMicroserviceIds);
sendRequest(env,
rec);
}
// fetch data from reply
private boolean asyncGetInstances(@NotNull final CEnvelope aEnvelope,
@NotNull final CRecord aRecord)
{
if (aEnvelope.isAnswer())
{
if (aEnvelope.getResultCode() == CResultCode.SUCCESS)
{
final CRecord[] instances = CRecordGetMicroServiceInstances.getMicroServiceInstances(aRecord,
null);
for (CRecord instance : instances)
{
final IId instanceId = CRecordMicroServiceInstance.getMicroServiceInstanceId(instance,
null);
final IId microServiceId = CRecordMicroServiceInstance.getMicroServiceId(instance,
null);
final CTargetAddress address = CRecordMicroServiceInstance.getMicroServiceAddress(instance,
null);
final ZonedDateTime timeAdded = CRecordMicroServiceInstance.getTimeAdded(instance,
null);
// ...
}
}
return true;
}
return false;
}