Interface RRemoteService

  • All Known Implementing Classes:
    RedissonExecutorRemoteService, RedissonRemoteService

    public interface RRemoteService
    Allows to execute object methods remotely between Redisson instances (Server side and Client side instances in terms of remote invocation).

    1. Server side instance (worker instance). Register object with RRemoteService instance.

    RRemoteService remoteService = redisson.getRemoteService();

    // register remote service before any remote invocation
    remoteService.register(SomeServiceInterface.class, someServiceImpl);

    2. Client side instance. Invokes method remotely.

    RRemoteService remoteService = redisson.getRemoteService();
    SomeServiceInterface service = remoteService.get(SomeServiceInterface.class);

    String result = service.doSomeStuff(1L, "secondParam", new AnyParam());

    There are two timeouts during execution:

    Acknowledge (Ack) timeout.Client side instance waits for acknowledge message from Server side instance.

    If acknowledge has not been received by Client side instance then RemoteServiceAckTimeoutException will be thrown. And next invocation attempt can be made.

    If acknowledge has not been received Client side instance but Server side instance has received invocation message already. In this case invocation will be skipped, due to ack timeout checking by Server side instance.

    Execution timeout. Client side instance received acknowledge message. If it hasn't received any result or error from server side during execution timeout then RemoteServiceTimeoutException will be thrown.

    Author:
    Nikita Koksharov
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      <T> void deregister​(Class<T> remoteInterface)
      Deregister all workers for remote service
      <T> T get​(Class<T> remoteInterface)
      Get remote service object for remote invocations.
      <T> T get​(Class<T> remoteInterface, long executionTimeout, TimeUnit executionTimeUnit)
      Get remote service object for remote invocations with specified invocation timeout.
      <T> T get​(Class<T> remoteInterface, long executionTimeout, TimeUnit executionTimeUnit, long ackTimeout, TimeUnit ackTimeUnit)
      Get remote service object for remote invocations with specified invocation and ack timeouts
      <T> T get​(Class<T> remoteInterface, RemoteInvocationOptions options)
      Get remote service object for remote invocations with the specified options
      int getFreeWorkers​(Class<?> remoteInterface)
      Returns free workers amount available for tasks
      <T> void register​(Class<T> remoteInterface, T object)
      Register remote service with single worker
      <T> void register​(Class<T> remoteInterface, T object, int workersAmount)
      Register remote service with custom workers amount
      <T> void register​(Class<T> remoteInterface, T object, int workers, ExecutorService executor)
      Register remote service with custom workers amount and executor for running them
    • Method Detail

      • getFreeWorkers

        int getFreeWorkers​(Class<?> remoteInterface)
        Returns free workers amount available for tasks
        Parameters:
        remoteInterface - - remote service interface
        Returns:
        workers amount
      • register

        <T> void register​(Class<T> remoteInterface,
                          T object)
        Register remote service with single worker
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        object - - remote service object
      • register

        <T> void register​(Class<T> remoteInterface,
                          T object,
                          int workersAmount)
        Register remote service with custom workers amount
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        object - - remote service object
        workersAmount - - workers amount
      • register

        <T> void register​(Class<T> remoteInterface,
                          T object,
                          int workers,
                          ExecutorService executor)
        Register remote service with custom workers amount and executor for running them
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        object - - remote service object
        workers - - workers amount
        executor - - executor service
      • deregister

        <T> void deregister​(Class<T> remoteInterface)
        Deregister all workers for remote service
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
      • get

        <T> T get​(Class<T> remoteInterface)
        Get remote service object for remote invocations.

        This method is a shortcut for

             get(remoteInterface, RemoteInvocationOptions.defaults())
         
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        Returns:
        remote service instance
        See Also:
        RemoteInvocationOptions.defaults(), get(Class, RemoteInvocationOptions)
      • get

        <T> T get​(Class<T> remoteInterface,
                  long executionTimeout,
                  TimeUnit executionTimeUnit)
        Get remote service object for remote invocations with specified invocation timeout.

        This method is a shortcut for

             get(remoteInterface, RemoteInvocationOptions.defaults()
              .expectResultWithin(executionTimeout, executionTimeUnit))
         
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        executionTimeout - - invocation timeout
        executionTimeUnit - - time unit
        Returns:
        remote service instance
        See Also:
        RemoteInvocationOptions.defaults(), get(Class, RemoteInvocationOptions)
      • get

        <T> T get​(Class<T> remoteInterface,
                  long executionTimeout,
                  TimeUnit executionTimeUnit,
                  long ackTimeout,
                  TimeUnit ackTimeUnit)
        Get remote service object for remote invocations with specified invocation and ack timeouts

        This method is a shortcut for

             get(remoteInterface, RemoteInvocationOptions.defaults()
              .expectAckWithin(ackTimeout, ackTimeUnit)
              .expectResultWithin(executionTimeout, executionTimeUnit))
         
        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        executionTimeout - - invocation timeout
        executionTimeUnit - - time unit
        ackTimeout - - ack timeout
        ackTimeUnit - - time unit
        Returns:
        remote service object
        See Also:
        RemoteInvocationOptions, get(Class, RemoteInvocationOptions)
      • get

        <T> T get​(Class<T> remoteInterface,
                  RemoteInvocationOptions options)
        Get remote service object for remote invocations with the specified options

        Note that when using the noResult() option, it is expected that the invoked method returns void, or else IllegalArgumentException will be thrown.

        Type Parameters:
        T - type of remote service
        Parameters:
        remoteInterface - - remote service interface
        options - - service options
        Returns:
        remote service object
        See Also:
        RemoteInvocationOptions