Merge pull request #495 from pierredavidbelanger/remote-service-interface-custom-prefix

Allows one to specify the remote service interface prefix (idea from #494)
pull/496/merge
Nikita Koksharov 9 years ago
commit 443030e7a4

@ -390,7 +390,12 @@ public class Redisson implements RedissonClient {
public RRemoteService getRemoteSerivce() {
return new RedissonRemoteService(this);
}
@Override
public RRemoteService getRemoteSerivce(String name) {
return new RedissonRemoteService(this, name);
}
@Override
public <V> RSortedSet<V> getSortedSet(String name) {
return new RedissonSortedSet<V>(commandExecutor, name);

@ -594,12 +594,20 @@ public interface RedissonClient {
RScript getScript();
/**
* Returns object for remote operations
* Returns object for remote operations prefixed with the default name (redisson_remote_service)
*
* @return
*/
RRemoteService getRemoteSerivce();
/**
* Returns object for remote operations prefixed with the specified name
*
* @param name The name used as the Redis key prefix for the services
* @return
*/
RRemoteService getRemoteSerivce(String name);
/**
* Return batch object which executes group of
* command in pipeline.

@ -56,9 +56,15 @@ public class RedissonRemoteService implements RRemoteService {
private final Map<RemoteServiceKey, RemoteServiceMethod> beans = PlatformDependent.newConcurrentHashMap();
private final Redisson redisson;
private final String name;
public RedissonRemoteService(Redisson redisson) {
this(redisson, "redisson_remote_service");
}
public RedissonRemoteService(Redisson redisson, String name) {
this.redisson = redisson;
this.name = name;
}
@Override
@ -80,7 +86,7 @@ public class RedissonRemoteService implements RRemoteService {
}
for (int i = 0; i < executorsAmount; i++) {
String requestQueueName = "redisson_remote_service:{" + remoteInterface.getName() + "}";
String requestQueueName = name + ":{" + remoteInterface.getName() + "}";
RBlockingQueue<RemoteServiceRequest> requestQueue = redisson.getBlockingQueue(requestQueueName);
subscribe(remoteInterface, requestQueue);
}
@ -107,7 +113,7 @@ public class RedissonRemoteService implements RRemoteService {
}
final RemoteServiceMethod method = beans.get(new RemoteServiceKey(remoteInterface, request.getMethodName()));
final String responseName = "redisson_remote_service:{" + remoteInterface.getName() + "}:" + request.getRequestId();
final String responseName = name + ":{" + remoteInterface.getName() + "}:" + request.getRequestId();
Future<List<?>> ackClientsFuture = send(request.getAckTimeout(), responseName, new RemoteServiceAck());
ackClientsFuture.addListener(new FutureListener<List<?>>() {
@ -167,13 +173,13 @@ public class RedissonRemoteService implements RRemoteService {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String requestId = generateRequestId();
String requestQueueName = "redisson_remote_service:{" + remoteInterface.getName() + "}";
String requestQueueName = name + ":{" + remoteInterface.getName() + "}";
RBlockingQueue<RemoteServiceRequest> requestQueue = redisson.getBlockingQueue(requestQueueName);
RemoteServiceRequest request = new RemoteServiceRequest(requestId, method.getName(), args,
ackTimeUnit.toMillis(ackTimeout), executionTimeUnit.toMillis(executionTimeout), System.currentTimeMillis());
requestQueue.add(request);
String responseName = "redisson_remote_service:{" + remoteInterface.getName() + "}:" + requestId;
String responseName = name + ":{" + remoteInterface.getName() + "}:" + requestId;
RBlockingQueue<RRemoteServiceResponse> responseQueue = redisson.getBlockingQueue(responseName);
RemoteServiceAck ack = (RemoteServiceAck) responseQueue.poll(ackTimeout, ackTimeUnit);

@ -104,5 +104,21 @@ public class RedissonRemoteServiceTest extends BaseTest {
r1.shutdown();
r2.shutdown();
}
@Test
public void testInvocationWithServiceName() {
String name = "MyServiceName";
RedissonClient r1 = Redisson.create();
r1.getRemoteSerivce(name).register(RemoteInterface.class, new RemoteImpl());
RedissonClient r2 = Redisson.create();
RemoteInterface ri = r2.getRemoteSerivce(name).get(RemoteInterface.class);
ri.voidMethod("someName", 100L);
assertThat(ri.resultMethod(100L)).isEqualTo(200);
r1.shutdown();
r2.shutdown();
}
}

Loading…
Cancel
Save