• 9.1. 分布式远程服务(Remote Service)

    9.1. 分布式远程服务(Remote Service)

    基于Redis的Java分布式远程服务,可以用来通过共享接口执行存在于另一个Redisson实例里的对象方法。换句话说就是通过Redis实现了Java的远程过程调用(RPC)。分布式远程服务基于可以用POJO对象,方法的参数和返回类不受限制,可以是任何类型。

    分布式远程服务(Remote Service)提供了两种类型的RRemoteService实例:

    • 服务端(远端)实例 - 用来执行远程方法(工作者实例即worker instance).例如:```javaRRemoteService remoteService = redisson.getRemoteService();SomeServiceImpl someServiceImpl = new SomeServiceImpl();

    // 在调用远程方法以前,应该首先注册远程服务// 只注册了一个服务端工作者实例,只能同时执行一个并发调用remoteService.register(SomeServiceInterface.class, someServiceImpl);

    // 注册了12个服务端工作者实例,可以同时执行12个并发调用remoteService.register(SomeServiceInterface.class, someServiceImpl, 12);

    1. * __客户端(本地)实例__ - 用来请求远程方法.
    2. 例如:
    3. ```java
    4. RRemoteService remoteService = redisson.getRemoteService();
    5. SomeServiceInterface service = remoteService.get(SomeServiceInterface.class);
    6. String result = service.doSomeStuff(1L, "secondParam", new AnyParam());

    客户端和服务端必须使用一样的共享接口,生成两者的Redisson实例必须采用相同的连接配置。客户端和服务端实例可以运行在同一个JVM里,也可以是不同的。客户端和服务端的数量不收限制。(注意:尽管Redisson不做任何限制,但是Redis的限制仍然有效。)

    在服务端工作者可用实例数量 大于1 的时候,将并行执行并发调用的远程方法。

    9.1. 分布式远程服务(Remote Service) - 图1

    并行执行工作者数量计算方法如下:T = R * N

    T - 并行执行工作者总数R - Redisson服务端数量N - 注册服务端时指定的执行工作者数量

    超过该数量的并发请求将在列队中等候执行。

    在服务端工作者实例可用数量为 1 时,远程过程调用将会按 顺序执行。这种情况下,每次只有一个请求将会被执行,其他请求将在列队中等候执行。

    9.1. 分布式远程服务(Remote Service) - 图2