Search in sources :

Example 16 with Message

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);
}
Also used : Message(io.scalecube.transport.Message)

Example 17 with Message

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);
    }
}
Also used : Address(io.scalecube.transport.Address) Message(io.scalecube.transport.Message)

Example 18 with Message

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) });
    }
}
Also used : Message(io.scalecube.transport.Message) Method(java.lang.reflect.Method) Observable(rx.Observable) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 19 with Message

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);
}
Also used : Message(io.scalecube.transport.Message)

Example 20 with Message

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();
}
Also used : MetricRegistry(com.codahale.metrics.MetricRegistry) Assert.assertTrue(org.junit.Assert.assertTrue) Test(org.junit.Test) AtomicReference(java.util.concurrent.atomic.AtomicReference) Executors(java.util.concurrent.Executors) Observable(rx.Observable) TimeUnit(java.util.concurrent.TimeUnit) Messages(io.scalecube.services.Messages) CountDownLatch(java.util.concurrent.CountDownLatch) Microservices(io.scalecube.services.Microservices) ServiceCall(io.scalecube.services.ServiceCall) Schedulers(rx.schedulers.Schedulers) Message(io.scalecube.transport.Message) BaseTest(io.scalecube.testlib.BaseTest) Subscription(rx.Subscription) ServiceCall(io.scalecube.services.ServiceCall) Message(io.scalecube.transport.Message) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) Subscription(rx.Subscription) Microservices(io.scalecube.services.Microservices) Test(org.junit.Test) BaseTest(io.scalecube.testlib.BaseTest)

Aggregations

Message (io.scalecube.transport.Message)51 BaseTest (io.scalecube.testlib.BaseTest)31 Test (org.junit.Test)31 CountDownLatch (java.util.concurrent.CountDownLatch)28 Observable (rx.Observable)10 Member (io.scalecube.cluster.Member)8 Microservices (io.scalecube.services.Microservices)6 TimeUnit (java.util.concurrent.TimeUnit)6 Logger (org.slf4j.Logger)6 LoggerFactory (org.slf4j.LoggerFactory)6 ServiceCall (io.scalecube.services.ServiceCall)5 Collections (java.util.Collections)5 Executors (java.util.concurrent.Executors)5 AtomicReference (java.util.concurrent.atomic.AtomicReference)5 Schedulers (rx.schedulers.Schedulers)5 List (java.util.List)4 Subscription (rx.Subscription)4 PublishSubject (rx.subjects.PublishSubject)4 Subject (rx.subjects.Subject)4 MetricRegistry (com.codahale.metrics.MetricRegistry)3