use of io.scalecube.transport.Message in project scalecube by scalecube.
the class MembershipProtocolImpl method onSync.
/**
* Merges incoming SYNC data, merges it and sending back merged data with SYNC_ACK.
*/
private void onSync(Message syncMsg) {
LOGGER.debug("Received Sync: {}", syncMsg);
syncMembership(syncMsg.data(), false);
Message syncAckMsg = prepareSyncDataMsg(SYNC_ACK, syncMsg.correlationId());
transport.send(syncMsg.sender(), syncAckMsg);
}
use of io.scalecube.transport.Message in project scalecube by scalecube.
the class MembershipProtocolImpl method doSync.
private void doSync() {
try {
Address syncMember = selectSyncAddress();
if (syncMember == null) {
return;
}
Message syncMsg = prepareSyncDataMsg(SYNC, null);
transport.send(syncMember, syncMsg);
LOGGER.debug("Send Sync to {}: {}", syncMember, syncMsg);
} catch (Exception cause) {
LOGGER.error("Unhandled exception: {}", cause, cause);
}
}
use of io.scalecube.transport.Message in project scalecube by scalecube.
the class LocalServiceInstance method listen.
@Override
public Observable<Message> listen(Message request) {
checkArgument(request != null, "message can't be null.");
checkArgument(request.correlationId() != null, "subscribe request must contain correlationId.");
final Method method = getMethod(request);
checkArgument(method.getReturnType().equals(Observable.class), "subscribe method must return Observable.");
final String cid = request.correlationId();
try {
final Observable<?> observable = (Observable<?>) invoke(request, method);
return observable.map(message -> {
Metrics.mark(metrics, this.serviceObject.getClass(), method.getName(), "onNext");
return Messages.asResponse(message, cid, memberId);
});
} catch (IllegalAccessException | InvocationTargetException ex) {
Metrics.mark(metrics, this.serviceObject.getClass(), method.getName(), "error");
return Observable.from(new Message[] { Messages.asResponse(ex, cid, memberId) });
}
}
use of io.scalecube.transport.Message in project scalecube by scalecube.
the class DispatchingFuture method completeExceptionally.
/**
* complete this future and explicitly reply with a give Throwable to sender.
*
* @param error given error to reply with.
*/
public void completeExceptionally(Throwable error) {
Message errorResponseMsg = Message.builder().data(error).header(ServiceHeaders.SERVICE_RESPONSE, "Response").header(ServiceHeaders.EXCEPTION, "").correlationId(request.correlationId()).build();
cluster.send(request.sender(), errorResponseMsg);
}
use of io.scalecube.transport.Message in project scalecube by scalecube.
the class TestStreamingService method test_scheduled_messages.
@Test
public void test_scheduled_messages() throws InterruptedException {
int batchSize = 1;
Microservices gateway = Microservices.builder().build();
Microservices node = Microservices.builder().seeds(gateway.cluster().address()).services(new SimpleQuoteService()).build();
ServiceCall service = gateway.dispatcher().create();
final CountDownLatch latch1 = new CountDownLatch(batchSize);
AtomicReference<Subscription> sub1 = new AtomicReference<Subscription>(null);
Message scheduled = Messages.builder().request(QuoteService.NAME, "scheduled").data(1000).build();
sub1.set(service.listen(scheduled).serialize().subscribe(onNext -> {
sub1.get().isUnsubscribed();
latch1.countDown();
}));
latch1.await(2, TimeUnit.SECONDS);
assertTrue(latch1.getCount() == 0);
node.shutdown();
gateway.shutdown();
}
Aggregations