[编织消息框架][rpc]使用篇

rpc 分两部份,一个是调用者,另一方是服务提供者

调用者只关心那个服务,传相应参数,返回内容就可以

而提供者根据调用相应服务同参数,工作处理后响应内容即可

根据他们的关系可以用JAVA 接口同实现类 来约束书写完成功能

 1 @QModel(1)
 2 public interface ITestEnhance {
 3     @QCommond(1)
 4     public void a(double a);
 5 
 6     @QCommond(2)
 7     public void b(float a);
 8 
 9     @QCommond(3)
10     public void c(byte a);
11 
12     @QCommond(4)
13     public void d(long a);
14 
15     @QCommond(5)
16     public void e(TestMessageObject obj);
17 
18     @QCommond(6)
19     public void f(AtomicLong al);
20     
21     @QCommond(7)
22     public TestMessageObject g(AtomicLong a,long b,TestMessageObject c);
23 }
接口
 1 public class TestEnhanceImpl implements ITestEnhance {
 2 
 3     @Override
 4     public void a(double a) {
 5     System.out.println("a接收到 数值 : " + a);
 6 
 7     }
 8 
 9     @Override
10     public void b(float a) {
11     System.out.println("b接收到 数值 : " + a);
12 
13     }
14 
15     @Override
16     public void c(byte a) {
17     System.out.println("c接收到 数值 : " + a);
18     }
19 
20     @Override
21     public void d(long a) {
22     System.out.println("d接收到 数值 : " + a);
23     }
24 
25     @Override
26     public void e(TestMessageObject obj) {
27     if (obj == null) {
28         return;
29     }
30     System.out.println("e接收到 数值 : " + SerialUtil.writeValueAsString(obj));
31 
32     }
33 
34     @Override
35     public void f(AtomicLong a) {
36     System.out.println("f接收到 数值 : " + a.get());
37     }
38 
39     @Override
40     public TestMessageObject g(AtomicLong a, long b, TestMessageObject c) {
41     System.out.println("g接收到 数值 : " + a.get());
42     System.out.println("g接收到 数值 : " + b);
43     System.out.println("g接收到 数值 : " + SerialUtil.writeValueAsString(c));
44      return c;
45     }
46     public static void main(String[] args) {
47     ITestEnhance proxyObject = QRpcFactory.loadProxy(ITestEnhance.class,1L);
48     QRpcFactory.registerInvokeService(new TestEnhanceImpl());
49 
50     proxyObject.a(-0.2);
51     proxyObject.b(0);
52     proxyObject.c((byte) 0x0);
53     proxyObject.c((byte) 0x1);
54     proxyObject.d((byte) 0x1);
55 
56     proxyObject.e(TestMessageObject.of());
57     proxyObject.f(new AtomicLong(-9));
58 
59     proxyObject.e(null);
60     TestMessageObject obj=proxyObject.g(new AtomicLong(-11112), Long.MAX_VALUE, TestMessageObject.of());
61     SerialUtil.println(obj);
62     }
63 }
实现类
 1 /****
 2  * 
 3  * @author solq
 4  */
 5 public abstract class QRpcFactory {
 6     private final static QRpcEnhanceService enhanceService = QRpcEnhanceService.getFactory();
 7 
 8     public static <T> T loadProxy(Class<T> target, QNode... nodes) {
 9     JavassistProxy.getDefault().register(target, enhanceService);
10     T ret = JavassistProxy.getDefault().transform(target);
11     IRpcContext ctx = (IRpcContext) ret;
12     ctx.setContext(RpcContext.of(nodes));
13     return ret;
14     }
15 
16     public static <T> T loadProxy(Class<T> target, long... ids) {
17     JavassistProxy.getDefault().register(target, enhanceService);
18     T ret = JavassistProxy.getDefault().transform(target);
19     IRpcContext ctx = (IRpcContext) ret;
20     ctx.setContext(RpcContext.of(ids));
21     return ret;
22     }
23 
24     public static void registerInvokeService(Object target) {
25     enhanceService.registerInvokeService(target);
26     }
27 }
rpc调用同注册工厂
 1 a接收到 数值 : -0.2
 2 b接收到 数值 : 0.0
 3 c接收到 数值 : 0
 4 c接收到 数值 : 1
 5 d接收到 数值 : 1
 6 e接收到 数值 : {"start":1487901957121}
 7 f接收到 数值 : -9
 8 g接收到 数值 : -11112
 9 g接收到 数值 : 9223372036854775807
10 g接收到 数值 : {"start":1487901957157}
11 {"start":1487901957157}

 

为什么要这样做?其实也可以用最原理的方式socket 或http 或JAVA 本身提供的rpc来做,自己做轮子跟使用轮子创造出来的价值是不能相比

处理做法上面说得很清楚,具体实现细节我在新书里会写出来,欢迎大家关注

 

posted @ 2017-02-26 19:46  solq321  阅读(328)  评论(0编辑  收藏  举报