偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Java分布式之RMI實(shí)例教程

企業(yè)動(dòng)態(tài) 分布式
最近的聯(lián)通項(xiàng)目,下一階段可能會(huì)涉及到和各省間的RMI接口,所以總結(jié)一下08年中國(guó)移動(dòng)自動(dòng)撥測(cè)系統(tǒng)用到的RMI技術(shù),以備不時(shí)之需。

Java分布式之RMI實(shí)例教程,RMI的基礎(chǔ)是接口,RMI構(gòu)架基于一個(gè)重要的原理:定義接口和定義接口的具體實(shí)現(xiàn)是分開(kāi)的。

編輯特別推薦:

 

關(guān)于Java性能監(jiān)控不知道的五件事

Java運(yùn)行時(shí)環(huán)境初始化時(shí)出現(xiàn)錯(cuò)誤

SQLServe數(shù)據(jù)庫(kù)到DB2連接服務(wù)器的實(shí)現(xiàn)過(guò)程全解

前言

最近的聯(lián)通項(xiàng)目,下一階段可能會(huì)涉及到和各省間的RMI接口,所以總結(jié)一下08年中國(guó)移動(dòng)自動(dòng)撥測(cè)系統(tǒng)用到的RMI技術(shù),以備不時(shí)之需。同時(shí)也給廣大初哥提供一些學(xué)習(xí)資料,哈哈。前幾年,一直忙于項(xiàng)目,沒(méi)怎么做系統(tǒng)總結(jié)。以后計(jì)劃寫(xiě)一些以前項(xiàng)目用過(guò)的Java分布式技術(shù)實(shí)例教程,如:RMI、Socket、Mina、SNMP、SOAP、Web Service、Hessian、JMS等。希望和大家一起交流,分享經(jīng)驗(yàn),一起提高。

RMI簡(jiǎn)介

RMI,遠(yuǎn)程方法調(diào)用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java應(yīng)用程序的方便途徑。RMI是非常容易使用的,但是它非常的強(qiáng)大。

RMI的基礎(chǔ)是接口,RMI構(gòu)架基于一個(gè)重要的原理:定義接口和定義接口的具體實(shí)現(xiàn)是分開(kāi)的??纯磈boss-remoting:

基本原理

要實(shí)現(xiàn)網(wǎng)絡(luò)機(jī)器間的通訊,首先得來(lái)看看計(jì)算機(jī)系統(tǒng)網(wǎng)絡(luò)通信的基本原理,在底層層面去看,網(wǎng)絡(luò)通信需要做的就是將流從一臺(tái)計(jì)算機(jī)傳輸?shù)搅硗庖慌_(tái)計(jì)算機(jī),基于傳輸協(xié)議和網(wǎng)絡(luò)IO來(lái)實(shí)現(xiàn),其中傳輸協(xié)議比較出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上為某類(lèi)應(yīng)用場(chǎng)景而擴(kuò)展出的傳輸協(xié)議,網(wǎng)絡(luò)IO,主要有bio、nio、aio三種方式,所有的分布式應(yīng)用通訊都基于這個(gè)原理而實(shí)現(xiàn),只是為了應(yīng)用的易用,各種語(yǔ)言通常都會(huì)提供一些更為貼近應(yīng)用易用的應(yīng)用層協(xié)議。

主要步驟

分為以下幾個(gè)步驟:

1. 創(chuàng)建遠(yuǎn)程接口及聲明遠(yuǎn)程方法(RmiMonitorService.java)

2. 實(shí)現(xiàn)遠(yuǎn)程接口及遠(yuǎn)程方法(繼承UnicastRemoteObject)(RmiMonitorServiceImpl.java)

3. 啟動(dòng)RMI注冊(cè)服務(wù),并注冊(cè)遠(yuǎn)程對(duì)象(RmiServer.java)

4. 客戶(hù)端查找遠(yuǎn)程對(duì)象,并調(diào)用遠(yuǎn)程方法(MonitorClient.java)

5. 運(yùn)行實(shí)例#p#

業(yè)務(wù)場(chǎng)景

在移動(dòng)撥測(cè)系統(tǒng)管理端中要融合實(shí)時(shí)顯示。簡(jiǎn)單點(diǎn)說(shuō)就是設(shè)備出現(xiàn)告警時(shí),要采用不同方式實(shí)時(shí)展示。如Web界面(Ajax)、GIS等。

主要業(yè)務(wù)流程設(shè)計(jì):

1. 設(shè)備告警

2. 調(diào)用RMI Client

3. 調(diào)用RMI Server

4. 調(diào)用業(yè)務(wù)處理接口

5. 告警信息入庫(kù)

6. 實(shí)時(shí)顯示(Ajax,Gis等技術(shù))

技術(shù)設(shè)計(jì)

接口函數(shù)函數(shù)名稱(chēng): int interactive( int funindex, string param )

參數(shù)說(shuō)明:

funindex 功能號(hào),整型。1為設(shè)備告警

param 交互參數(shù),字符串型。

返回:

成功=1,失敗=0。

說(shuō)明:

param交互參數(shù)用鍵值對(duì)組成,每個(gè)鍵值對(duì)以“&”分割,如:Tsid=01&devid=002&warnid=102&warntype=01&warnlevel=1 。

測(cè)試點(diǎn)ID(tsid)

設(shè)備ID(devid)

告警ID(warnid)

告警類(lèi)型(warntype)

告警級(jí)別(warnlevel)

代碼實(shí)現(xiàn)#p#

廢話(huà)少說(shuō),上代碼,為了演示方便,經(jīng)過(guò)整理,省去了很多get,set之類(lèi)的東東還有業(yè)務(wù)的東西以及Spring相關(guān)的東西。

 

  1. Java代碼  
  2. RmiMonitorService.java  
  3. package nbpt.ts.manager.message.service;  
  4. import java.rmi.Remote;  
  5. import java.rmi.RemoteException;  
  6. /**  
  7. * Description: 實(shí)時(shí)顯示RMI服務(wù)接口.  
  8. *  
  9. * RMI接口必須擴(kuò)展接口java.rmi.Remote  
  10. *  
  11. * @author Peter Wei  
  12. * @version 1.0 Feb 25, 2009  
  13. */  
  14. public interface RmiMonitorService extends Remote {  
  15. /**  
  16. * 實(shí)時(shí)顯示對(duì)外接口  
  17. *  
  18. * @param funindex  
  19. * 功能號(hào)  
  20. * @param param  
  21. * 鍵名列表,也就是實(shí)際傳輸?shù)膬?nèi)容  
  22. * @return  
  23. * @throws RemoteException  
  24. * 遠(yuǎn)程接口方法必須拋出java.rmi.RemoteException  
  25. */  
  26. public int interactive(int funindex, String param) throws RemoteException;  
  27. }  
  28. RmiMonitorServiceImpl.java  
  29. package nbpt.ts.manager.message.service.impl;  
  30. import java.rmi.RemoteException;  
  31. import java.rmi.server.UnicastRemoteObject;  
  32. // import nbpt.ts.manager.base.util.AppContext;  
  33. import nbpt.ts.manager.message.service.RmiMonitorService;  
  34. import nbpt.ts.manager.message.service.WarnService;  
  35. /**  
  36. * Description: 實(shí)時(shí)顯示RMI接口實(shí)現(xiàn).  
  37. *  
  38. * 實(shí)現(xiàn)RMI接口及遠(yuǎn)程方法(繼承UnicastRemoteObject)  
  39. *  
  40. * @author Peter Wei  
  41. * @version 1.0 Feb 25, 2009  
  42. */  
  43. public class RmiMonitorServiceImpl extends UnicastRemoteObject implements  
  44. RmiMonitorService {  
  45. private static final long serialVersionUID = -3771656108378649574L;  
  46. public static final int SUCCSS = 1;  
  47. public static final int FAIL = 0;  
  48. public WarnService warnService;  
  49. /**  
  50. * 必須定義構(gòu)造方法,因?yàn)橐獟伋鯮emoteException異常  
  51. *  
  52. * @throws RemoteException  
  53. */  
  54. public RmiMonitorServiceImpl() throws RemoteException {  
  55. super();  
  56. }  
  57. public int interactive(int funindex, String param) throws RemoteException {  
  58. int result = FAIL;  
  59. switch (funindex) {  

 

告警#p#

 

  1. case (1): {  
  2. // warnService = (WarnService) AppContext.getAppContext().getBean(  
  3. // "warn.warnService");  

 

實(shí)際應(yīng)用是從Spring應(yīng)用中獲取告警Service,如上代碼

 

  1. warnService = new WarnServiceImpl(); 

網(wǎng)絡(luò)告警的業(yè)務(wù)操作

 

  1. warnService.dealWarn(param);  
  2. result = SUCCSS;  
  3. }  
  4. break;  
  5. case (2):  
  6. // do other biz  
  7. break;  
  8. }  
  9. // ......  
  10. return result;  
  11. }  
  12. public WarnService getWarnService() {  
  13. return warnService;  
  14. }  
  15. public void setWarnService(WarnService warnService) {  
  16. this.warnService = warnService;  
  17. }  
  18. }  
  19. RmiServer.java  
  20. package nbpt.ts.manager.message.service;  
  21. import java.net.MalformedURLException;  
  22. import java.rmi.AlreadyBoundException;  
  23. import java.rmi.Naming;  
  24. import java.rmi.RemoteException;  
  25. import java.rmi.registry.LocateRegistry;  
  26. import nbpt.ts.manager.message.service.impl.RmiMonitorServiceImpl;  
  27. /**  
  28. * Description: RMI服務(wù)端.  
  29. *  
  30. * @author Peter Wei  
  31. * @version 1.0 Feb 25, 2009  
  32. */  
  33. public class RmiServer {  
  34. public String ip = "localhost";  
  35. public int port = 8889;  
  36. /**  
  37. * 啟動(dòng)RMI注冊(cè)服務(wù),并注冊(cè)遠(yuǎn)程對(duì)象.實(shí)際應(yīng)用中是在Spring初始化并啟動(dòng)  
  38. */  
  39. public void init() {  
  40. try {  
  41. LocateRegistry.createRegistry(port);  
  42. // 創(chuàng)建一個(gè)遠(yuǎn)程對(duì)象  
  43. RmiMonitorService comm = new RmiMonitorServiceImpl();  
  44. Naming.bind("//" + ip + ":" + port + "/comm", comm);  
  45. } catch (RemoteException e) {  
  46. System.out.println("創(chuàng)建遠(yuǎn)程對(duì)象發(fā)生異常!" + e.toString());  
  47. e.printStackTrace();  
  48. } catch (AlreadyBoundException e) {  
  49. System.out.println("發(fā)生重復(fù)綁定對(duì)象異常!" + e.toString());  
  50. e.printStackTrace();  
  51. } catch (MalformedURLException e) {  
  52. System.out.println("發(fā)生URL畸形異常!" + e.toString());  
  53. e.printStackTrace();  
  54. }  
  55. }  
  56. public String getIp() {  
  57. return ip;  
  58. }  
  59. public void setIp(String ip) {  
  60. this.ip = ip;  
  61. }  
  62. public int getPort() {  
  63. return port;  
  64. }  
  65. public void setPort(int port) {  
  66. this.port = port;  
  67. }  
  68. public static void main(String[] args) {  

 

 實(shí)際應(yīng)用中是在Spring初始化并啟動(dòng)#p#

 

  1. RmiServer rmiServer = new RmiServer();  
  2. System.out.println("RMI服務(wù)初始化:");  
  3. rmiServer.init();  
  4. }  
  5. }  
  6. MonitorClient.java  
  7. package nbpt.ts.manager.message.service;  
  8. import java.net.MalformedURLException;  
  9. import java.rmi.Naming;  
  10. import java.rmi.NotBoundException;  
  11. import java.rmi.RemoteException;  
  12. /**  
  13. * Description: RMI客戶(hù)端.  
  14. *  
  15. * @author Peter Wei  
  16. * @version 1.0 Feb 25, 2009  
  17. */  
  18. public class MonitorClient {  
  19. public RmiMonitorService monitorService;  
  20. public String ip = "localhost";  
  21. public int port = 8889;  
  22. public int interactive(int funindex, String param)   
  23. int result = 0;  
  24. try {  
  25. getMonitorService().interactive(funindex, param);  
  26. result = 1;  
  27. } catch (RemoteException e) {  
  28. e.printStackTrace();  
  29. }  
  30. return result;  
  31. }  
  32. public RmiMonitorService getMonitorService() {  
  33. try {  

 

在RMI服務(wù)注冊(cè)表中查找名稱(chēng)為RmiMonitorService的對(duì)象,并調(diào)用其上的方法#p#

 

  1. monitorService = (RmiMonitorService) Naming.lookup("rmi://" + ip  
  2. + ":" + port + "/comm");  
  3. } catch (NotBoundException e) {  
  4. e.printStackTrace();  
  5. } catch (MalformedURLException e) {  
  6. e.printStackTrace();  
  7. } catch (RemoteException e) {  
  8. e.printStackTrace();  
  9. }  
  10. return monitorService;  
  11. }  
  12. public static void main(String args[]) throws RemoteException {  
  13. MonitorClient client = new MonitorClient();  
  14. System.out.println("發(fā)送告警信息:");  
  15. String msg = "tsid=1022&devid=10001027&warnid=102&warntype=01&warnlevel=1&warnmsg=設(shè)備出錯(cuò),請(qǐng)檢查.";  
  16. System.out.println(client.getValue(msg, "warnmsg"));  
  17. client.interactive(1, msg);  
  18. }  
  19. public String getValue(String content, String key) {  
  20. String value = "";  
  21. int begin = 0end = 0;  
  22. begin = content.indexOf(key + "=");  
  23. end = content.indexOf("&", begin);  
  24. if (end == -1)  
  25. end = content.length();  
  26. value = content.substring(begin + key.length() + 1, end);  
  27. return value;  
  28. }  
  29. }  
  30. WarnService.java  
  31. package nbpt.ts.manager.message.service;  
  32. /**  
  33. * Description: 告警服務(wù)  
  34. *  
  35. * @author Peter Wei  
  36. * @version 1.0 2010-8-22  
  37. */  
  38. public interface WarnService {  
  39. /**  

 

* 處理告警:告警來(lái)時(shí)的業(yè)務(wù)操作,實(shí)際操作是解析消息存庫(kù),然后界面Ajax定時(shí)刷新數(shù)據(jù),獲取實(shí)時(shí)告警展示#p#

 

  1. *  
  2. * @param message  
  3. * @return  
  4. */  
  5. public int dealWarn(String message);  
  6. }  
  7. WarnServiceImpl.java  
  8. package nbpt.ts.manager.message.service.impl;  
  9. import nbpt.ts.manager.message.service.WarnService;  
  10. /**  
  11. * Description: 告警服務(wù)  
  12. *  
  13. * @author Peter Wei  
  14. * @version 1.0 2010-8-22  
  15. */  
  16. public class WarnServiceImpl implements WarnService {  
  17. public int dealWarn(String message) {  

 

告警處理方法

 

  1. System.out.println("已接收網(wǎng)絡(luò)告警");  
  2. // …  
  3. return 1;  
  4. }  
  5. }  

 

 

責(zé)任編輯:佚名 來(lái)源: 中國(guó)人力資源開(kāi)發(fā)網(wǎng)
相關(guān)推薦

2009-06-19 14:23:41

RMIJava分布式計(jì)算

2009-09-18 11:44:05

Scala實(shí)例教程Kestrel

2018-07-17 08:14:22

分布式分布式鎖方位

2019-07-04 15:13:16

分布式緩存Redis

2014-08-26 11:46:46

QtAndroid實(shí)例教程

2019-02-18 11:16:12

Redis分布式緩存

2025-06-13 07:30:51

2010-08-17 11:02:45

DIV CSS實(shí)例教程

2019-06-17 15:25:17

expandunexpandLinux

2022-03-06 21:43:05

Citus架構(gòu)PostgreSQL

2019-02-13 13:41:07

MemCache分布式HashMap

2019-09-26 15:43:52

Hadoop集群防火墻

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2017-09-01 05:35:58

分布式計(jì)算存儲(chǔ)

2011-07-25 16:03:47

XCode 編譯

2021-12-28 17:03:29

數(shù)據(jù)質(zhì)量分布式

2019-12-26 08:59:20

Redis主從架構(gòu)

2013-01-04 16:17:33

Android開(kāi)發(fā)圖像特效圖像處理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)