瞎碰终于找到原因了
下图为项目的目录结构(包含服务端与客户端)
LoginControllerer.java代码如下:
LoginServiceInterface proxy = RPC.getProxy(LoginServiceInterface.class, 1L, new InetSocketAddress("localhost", 10003), new Configuration());
String result = proxy.login("mijie", "123456");
System.out.println(result);
}
}
此时启动starter.java 后执行 LoginController报错Unkown protocol(com.boco.hadoop.client.LoginServiceInterface)
导致错误的原因是:
LoginController 执行时,创建的代理对象是用带包名的protocol(com.boco.hadoop.client.LoginServiceInterface)
然而发布的service中的protocl(com.boco.hadoop.server.LoginServiceInterface),故报错;
建议客户端与服务端分为两个项目(目录结构相同)
解决该问题的宗旨是:
LoginServiceInterface proxy = RPC.getProxy(LoginServiceInterface.class, 1L, new InetSocketAddress("localhost", 10003), new Configuration());
builder.setBindAddress("localhost").setPort(10003).setProtocol(LoginServiceInterface.class).setInstance(new LoginServiceImpl());
保持客户端与服务端中的protocol为同一个包下同一个接口(com.boco.hadoop.LoginServiceInterface)即可;
欢迎批评指正!谢谢
本文介绍了一个关于远程过程调用(RPC)中客户端和服务端接口不一致的问题及解决方案。具体表现为客户端使用了带有特定包名的接口,而服务端注册的是另一个包名下的相同接口名称,导致RPC调用失败。文章给出了调整包名实现接口统一的方法。

478

被折叠的 条评论
为什么被折叠?



