diff --git a/src/main/java/org/redisson/RedissonRemoteService.java b/src/main/java/org/redisson/RedissonRemoteService.java index 55455db33..4126a1d96 100644 --- a/src/main/java/org/redisson/RedissonRemoteService.java +++ b/src/main/java/org/redisson/RedissonRemoteService.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import org.redisson.core.MessageListener; @@ -110,7 +111,12 @@ public class RedissonRemoteService implements RRemoteService { } @Override - public T get(final Class remoteInterface) { + public T get(Class remoteInterface) { + return get(remoteInterface, -1, null); + } + + @Override + public T get(final Class remoteInterface, final int timeout, final TimeUnit timeUnit) { InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { @@ -132,7 +138,11 @@ public class RedissonRemoteService implements RRemoteService { } }); - latch.await(); + if (timeout == -1) { + latch.await(); + } else { + latch.await(timeout, timeUnit); + } topic.removeListener(listenerId); RemoteServiceResponse msg = response.get(); if (msg.getError() != null) { diff --git a/src/main/java/org/redisson/core/RRemoteService.java b/src/main/java/org/redisson/core/RRemoteService.java index c322c512b..f8f27bd1a 100644 --- a/src/main/java/org/redisson/core/RRemoteService.java +++ b/src/main/java/org/redisson/core/RRemoteService.java @@ -15,6 +15,8 @@ */ package org.redisson.core; +import java.util.concurrent.TimeUnit; + public interface RRemoteService { /** @@ -42,4 +44,15 @@ public interface RRemoteService { */ T get(Class remoteInterface); + /** + * Get remote service object for remote invocations + * with specified timeout invocation + * + * @param remoteInterface + * @param timeout - timeout invocation + * @param timeUnit + * @return + */ + T get(Class remoteInterface, int timeout, TimeUnit timeUnit); + }