锁定老帖子 主题:基于xmlrpc的远程控制管理
精华帖 (0) :: 良好帖 (13) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-09-28
最后修改:2010-09-28
前段时间在做一个日终系统(统一管理所有客户端系统中各定时任务的一个系统)时,实现了其中一个远程管理客户端程序运行状态的模块。这里写出来与大家共享,如有不足之处,希望大家指出共同探讨完善! 根据上面的需求,首先想到的是这个模块的结构将是服务器/客户端模式。考虑使用这种模式的设计,则接下来应该考虑选择什么样的远程方式。当然,如果自己实现一个远程连接功能,小弟自认为能力还不足,呵呵,所以不得不从现有的远程连接方式中选择一个作为自己远程连接的基础。 整体设计
在上图中,灰色表示服务端的系统(即日终系统)、深蓝色表示服务端模块、淡黄色表示公共模块、桔黄色表示客户端模块、青色表示客户端系统。其中,灰色和青色是在具体使用时的结合部分。真正的该远程控制模块的部分为:深蓝色、淡黄色和桔黄色。 详细设计 mapping.load(Thread.currentThread().getContextClassLoader(), getDefaultProps()); …… /** * 将提供服务的类,从系统中加载进来 */ protected Properties getDefaultProps() { Properties props = new Properties(); props.put(OssXmlrpcRemoteExcutor.class.getSimpleName(), OssXmlrpcRemoteExcutor.class.getName()); return props; }
使用说明 <servlet> <servlet-name>XmlRpcServlet</servlet-name> <servlet-class>com.cloudtech.xmlrpc.common.OssXmlrpcServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XmlRpcServlet</servlet-name> <url-pattern>/xmlrpc</url-pattern> </servlet-mapping> import java.net.URL; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; import com.cloudtech.xmlrpc.common.OssXmlrpcPoolManager; import com.cloudtech.xmlrpc.server.OssListenClientStatusExcutor; public class OssXmlrpcRemoteInit { public void init() { // TODO 如果不希望影响系统启动速度,可以启用新线程执行下面的过程 initRemote(); initListener(); } /** * 初始化监听器 */ protected void initListener() { // TODO 先初始化需要监听的程序,这里就不实现了 OssListenClientStatusExcutor.startListen(); } /** * 初始化远程连接。 */ protected void initRemote() { XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); try { // 连接到客户端。 config.setServerURL(new URL("http://tfc.vemic.com:8081/xmlrpc"));// 这里是客户端的xmlrpc配置 config.setEnabledForExtensions(true); config.setEnabledForExceptions(true); config.setBasicEncoding("GBK"); config.setConnectionTimeout(30000); config.setContentLengthOptional(false); config.setReplyTimeout(0); OssXmlrpcPoolManager.createXmlRpcClient("localhost", config);// 这是连接池管理类。 } catch (Exception e) { e.printStackTrace(); } } } <servlet> <servlet-name>XmlRpcServlet</servlet-name> <servlet-class>com.cloudtech.xmlrpc.common.OssXmlrpcServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XmlRpcServlet</servlet-name> <url-pattern>/xmlrpc</url-pattern><!-- 注意这里的配置与上面的代码的客户端连接的对应关系 --> </servlet-mapping> <bean class="com.cloudtech.xmlrpc.client.ConnectServerExcutor"> <property name="serverURL" value="http://tfc.vemic.com/xmlrpc" /> </bean> 2、编写代码 import org.springframework.stereotype.Service; import com.cloudtech.xmlrpc.client.OssXmlClientSupport; @Service public class OssTriggerDemo extends OssXmlClientSupport {//注意这里继承了OssXmlClientSupport public void execute() { System.err.println("executeDemo..."); for (int i = 1; true; i++) { System.out.println("第" + i + "次循环!"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } 注意:上面的@Service是使用Spring的注解将该类扫描到Spring容器中去,这样“网关”类OssXmlrpcRemoteExcutor就可以通过Spring获取到该类。 public void testRemote() { try { OssXmlrpcClientFactory.execute("localhost", "OssTriggerDemo.execute"); } catch (OssXmlrpcException e) { e.printStackTrace(); } } 结语 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-28
你的UML图画的不太好。
受控端和服务端的边界没有表现出来。而且,我觉得,你的UML图中的依赖关系画的不大对。 如果系统中真实这样的依赖关系,建议你对受控端系统做下重构。 |
|
返回顶楼 | |
发表时间:2010-09-29
grayhound 写道 你的UML图画的不太好。
受控端和服务端的边界没有表现出来。而且,我觉得,你的UML图中的依赖关系画的不大对。 如果系统中真实这样的依赖关系,建议你对受控端系统做下重构。 谢谢提醒!说实话,我是第一次画uml图,所以画得很矬~呵呵。 其实这是第一次写好的,真正在应用到系统中之后,有许多细节的地方都优化过了,只是我记不得具体改了哪些了,所以也就没优化,将最初的代码拿过来了,希望大家可以给点意见嘛,呵呵。 |
|
返回顶楼 | |
发表时间:2010-10-01
楼主写的挺细的,但是看起来很迷糊。
|
|
返回顶楼 | |
发表时间:2010-10-01
飞语001 写道 楼主写的挺细的,但是看起来很迷糊。
那不就是表述不清嘛~ |
|
返回顶楼 | |
浏览 3064 次