基于Oxygen-SR4的ODL框架搭建與開發

作者簡介:宋波,從事SDN方向的ODL開發工作,4年有余

快3开奖结果查询QIANYAN:RUGUOYOUTONGXUEBUXIANGKANCHANGPIANDALUN,ZHIJIESHANGSHOUDAIMADE,QINGYIBUZHIWENZHANGMOWEI,YOUgithubXIANGMULIANJIE,DAJIAKEYIZIXINGXIAZAI,CHAKAN、BIANYIYIJIYUNXING,XIANGMUZHONGGUANJIANDEDIFANGDOUJIARULECHONGFENDEZHUSHIHESHUOMING。

本文主要闡述五個opendaylight項目中常用技術點:
1.RPC
2.datastore數據庫
3.datachangelistener數據監聽
4.notification通知的發送與接收
5.集群環境中remote-RPC(routed-rpc)遠程rpc開發與使用

對應本文講解的業務:
1.定義學生的數據庫datastore
2.Rpc能夠創建學生并存入數據庫中
3.監聽學生數據庫
4.發送一個學生逃課的通知notification,接收通知后將學生從數據庫中移除
快3开奖结果查询 5.實現以IP為ID的remote-rpc遠程rpc

1、工程框架搭建

CONGboronBANBENKAISHI,ODLGUANFANGWENDANGTIGONGLEXIANGMUGUJIASHENGCHENGZHIDAO。DAJIANKUANGJIABUZAIXUYAOQUYIBUBUCHUANGJIANmavenXIANGMU,BUYONGTIANJIAGEZHONGPEIZHIWENJIAN,BUYONGZHAOGEZHONGYILAI。

XIANGMUTONGGUOmvnMINGLINGYUANCHENGCANGKUHUOQUdemo-projectYIJIANSHENGCHENGXIANGMUKUANGJIA(KElinux,KEPC。mavenANZHUANGBUZAISHUOMING):

GUANFANGSHILI:

快3开奖结果查询WOXUANDECANSHUSHIrelease/ 1.5.4,DUIYINGGOUJIANoxygen-sr4BANBENXIANGMU

GUJIASHENGCHENGSHIYUANCHENGHUOQU,QINGBAOZHENGNIDEWANGLUOCHANGTONG,KENENGBIJIAOMAN,KANWANGSU。

骨架下載過程

填寫你的項目屬性:
官方示例:

快3开奖结果查询WOZHITIANXIELE'groupId'HE'artifactId',QITAMOREN:

骨架構建完成

GUJIASHENGCHENGHOUHUIYOUYIGEhelloXIANGMUWENJIANJIA,RUXIATU:

工程概況

快3开奖结果查询GUJIASHENGCHENGDEMOKUAIHENQUANMIAN,WOJUEDEZHISHIdemoDEHUABIJIAORONGYU,SUOYIJINGJIANLEYIXIA。

ZHUYAOSHANDIAOLEartifacts(SHENGMINGYIXIEBANBENHAO,GONGGONGYILAI),cli(TIGONGKONGZHITAIMINGLING),it(CESHI),src(BUZHIDAOGANMAYONGDE,KANLEHENDUOYUANMAYEMEIJIANGUOLEISIJIEGOUDEMULU)。featuresCAIDIAOZIfeature,ZHIBAOLIUZHUfeature。

MORENDEfeaturesDINGYI:

骨架生成feature

快3开奖结果查询CAIJIANHOUZHIBAOLIULEZHUfeature,RUTU:

簡化后的feature

快3开奖结果查询YINWEIBENWENZHONGGUJIASHENGCHENGDENEIRONGSHIWEILEGEIDAJIAYANSHIZHONGXINYUNXINGDE,SUOYIGENHOUXUJIANGJIEDENEIRONGHUIYOUDIANCHAYI,YIDAIMAWEIZHUN。

TIXINGDAJIA,SUIRANXIANZAIGUJIASHIYIJIANSHISHENGCHENG,DANSHIXINJIECHUODLDETONGXUEYIDINGYAOQULIJIEMOKUAIFENGONGYIJIGEZHONGPEIZHIHEYILAIDEZUOYONG,ZHEDUIDAJIALIJIEODLHENYOUBANGZHU。

GUANFANGGUJIASHENGCHENGFANGFACANYUEWENWEILIANJIE:ODLGUANFANGKAIFAZHIDAOWENDANG。

2、開發

快3开奖结果查询ZHELIHUIANZHAOGONGNENGLAIMIAOSHU,RUGUOSHIANMOKUAI,SUOYOUGONGNENGZAZAIYIQIBUFANGBIANLIJIE。

2.1 blueprint & provider

ZAIKAIFAimplSHIXIANLEIMOKUAIZHONGXUYAOYINYONGDEodlFUWUSHITONGGUOLANTULAIZHURUDE,ZAIYUNXINGGUOCHENGZHONGMOKUAIDEJIAZAIHEZHUXIAOYEDOUSHITONGGUOLANTU。SUOYIZAIKAIFAQIANXIANLIJIELANTUblueprintDEZUOYONGYIJIHEproviderLEILIANGZHEZHIJIANDEGUANXIFEICHANGZHONGYAO。

快3开奖结果查询XIANKANKANZIDONGSHENGCHENGDEGUJIAGEIWOMENDAILAILESHENME?

DIYIGESHIyang,XIANZAIZHIBAOHANZUIJICHUDEXINXI。YangWENJIANSHIGONGCHENGDEJIDIbase,GUANFANGSHIYIODLSHIYIYANGMODELMOXINGQUDONGKAIFA,HOUXUDEGONGNENGDOUYAOZAIZHELIDINGYI。

Yang文件

SHENGCHANZHEproviderLEI,GONGCHENGDERUKOU,HELANTULIANDONG。HOUXUYAOTIANJIACHUSHIHUADEGONGNENGJISHUJU。

生產者provider類

LANTUblueprint,FUWUDEZHUCE,HESHENGCHANZHELIANDONG。HOUXUYAOYINYONGFUWUBINGXIANGSHENGCHANZHEZHURU。

藍圖blueprint

快3开奖结果查询CHUSHIDEproviderLEIZHONGYIJINGBAOHANLEGOUZAOFANGFA,databroker,CHUSHIHUAFANGFAinitHEZHUXIAOFANGFAclose。ZHEXIEFANGFADEDIAOYONGHEDUIXIANGDECHUSHIHUAFUZHISHITONGGUOLANTU。

快3开奖结果查询LIANGZHEGUANXIZUOLEGEJIANTU,RUXIA:

藍圖和生產者關系

快3开奖结果查询InitHEcloseSHIZAIfeatureDEANZHUANGHEXIEZAISHI(odlQIDONGHETINGZHI)HUICHUFA。InitTONGCHANGLIMIANHUITIANJIACHUSHIHUADEFUWUZHUCE。CloseTIANJIAZIYUANDEZHUXIAO。

快3开奖结果查询ODLQIDONGJIAZAIDESHUNXU:odlQIDONG-> JIAZAIfeature-> JIAZAIblueprint-> JIAZAIprovider-> JIAZAIimpl DAOZHELI,SUOYOUDAIMAHEGONGCHENGYIJINGactiveHEready。

快3开奖结果查询LEJIELIANGZHEDEZUOYONGGUANXIHENGUANJIAN,HOUXUYAOSHUODEGONGNENGHEJISHUDIANDOUHUIYONGDAO,DUIYUGANGGANGJIECHUodlLAISHUO,DONGLEZHEXIE,JIUKEYIBAYEWUZUODERONGHUIGUANTONGLE,YEWUDAIMABINGBUSHIZUINANDE。

2.2 datastore

快3开奖结果查询CONGZHELIKAISHI,WOJIANGYIgithubGONGCHENGDAIMALAIJIANGJIE,DAJIAKEYIXIAZAIZHAOZHUKAN。

每個功能我會按照yang – blueprint – impl - rest的流程來講解。

Yang:學生的數據庫,定義了students的list,引用了grouping student。養成常寫grouping的習慣,不僅是yang文件可以復用,在寫java代碼時也是可以復用的。

blueprint:之前已經提過,provider中的databroker是個空對象,初始化是通過藍圖來注入,再看一下之前提的關系圖。

藍圖&生產者

快3开奖结果查询YINYONGodlDE“databroker”,RANHOUZAILANTUGOUZAOFANGFAZHURU。

Impl:創建Transaction(databroker獲取),創建數據ID(根據yang文件生成),操作(put,merge,delete,read)。

快3开奖结果查询GUANFANGTIGONGLIANGZHONGTIJIAOQINGQIUFANGSHI:YISHIYIBUZHENTINGTIJIAOZHUANGTAI ListenableFuture,ZHEGEFANGSHIFANGBIANZHENDUITIJIAOJIEGUOZUOBUTONGYEWUCHULI。

快3开奖结果查询ERSHIZUSAITIJIAO checkedGet(),ZHEGEFANGSHISHIDENGDAISHUJUCAOZUOWANCHENGHOU,FANGFACAIFANHUI,FOUZEYIZHIZUSAI。

快3开奖结果查询WOYONGDESHIDIERZHONG,DAJIAGENJUZIJIDEYEWUXUANZETIJIAOFANGSHI。

Rest:快3开奖结果查询Container定義好之后會自動生成增刪改查的數據接口,演示一下PUT接口。

PUT添加數據

Put是添加整個container的內容,會把之前的數據覆蓋,如果是增量添加,用post。
快3开奖结果查询 get:查看剛剛put的數據已經成功添加。

GET查詢數據

2.3 RPC

Yang:功能是添加一個student的信息到數據庫。

Rpc的兩個重要元素就是input和output,類似于方法的入參,返參。
這個rpc只有input,沒有定義output。input和output都是可選的,兩者都可以為空。
快3开奖结果查询 input復用了grouping student。前文有grouping的詳細信息。

快3开奖结果查询BIANYIZHIHOUHUISHENGCHENGrpcDEserviceFUWULEI:

Blueprint:
快3开奖结果查询 這里要先看一下rpc的實現類impl。這個impl類是用來專門實現rpc業務,不是yang自動生成的,需要我們自己定義。

快3开奖结果查询SHIXIANSHANGJIETIDAODEyangWENJIANSHENGCHENGDEserviceFUWULEI。

快3开奖结果查询ZAIKANLANTU:CHUANGJIANrpcSHIXIANLEIimplDEbean,RANHOUZHUCErpcSHIXIANLEIFUWU。

Impl:impl實現service之后,會自動生成重寫rpc的方法。
只要在方法里實現需要的業務即可。
快3开奖结果查询 本示例是輸入student信息然后添加到數據庫。

Rest:調用添加學生信息的rpc

調用RPC

GETCHAKANSHUJUKU,YICHENGGONGTIANJIA。

查看RPC調用之后的數據庫

2.4 datachangelistener

快3开奖结果查询SHUJUJIANTING,YOULIANGLEI,SANGEDONGZUO:

LIANGLEI:

  1. 普通監聽DataTreeChangeListener 在集群環境中,數據庫變化只有數據分片的主成員才能監聽到。
  2. 集群監聽ClusteredDataTreeChangeListener 在集群環境中,數據庫變化所有成員都能監聽到。

SHIYONGFANGFAJIUSHISHIXIANSHANGSHUBUTONGDEJIANTINGFUWULEI。BENWENYANSHIDESHIPUTONGJIANTING。

SANGEDONGZUO:

  1. write 數據添加
  2. update 數據更新
  3. delete 數據刪除

SANGEDONGZUOZAIKAIFAZHONGPUTONGHEJIQUNJIANTINGMEIYOUQUBIE。

Yang:無(要說有的話,只能勉強說是student container了,但實際上只是監聽這個數據庫,并不是說靠它創建監聽)

Blueprint:

Impl:
首先創建監聽實現類實現監聽服務類。

創建監聽注冊listenerRegistration,然后使用它來注冊監聽的student數據庫。
注意注冊的動作是寫在init方法里的,而init方法是構造方法調用的。上文說了blueprint并沒有這塊的配置,那構造方法是誰調用的呢?下面就說到provider類,由它來調用,或者說是初始化。

Provider CHUANGJIANhelloStudentDataListenerDUIXIANG。

然后在provider的init方法里做helloStudentDataListener對象的初始化。
Provider的init方法是藍圖調用的,這下就通順了。

ZHUNBEIGONGZUOZUOWAN,ZUIHOUKANYEWUDAIMABUFEN:

在實現監聽服務類后重寫監聽方法。
方法入參是changes,其實就是數據的變化情況,它會帶著變化前DataBefore和變化后DataAfter的數據。這里照著代碼按上述說的三個監聽動作,根據你的業務分別寫上你的“數據變化引起的反應”就可以了。
快3开奖结果查询 這里我只寫了一些日志。

Rest:不截圖了,就是向數據庫添加數據,用rpc或者container生成的接口都行。
添加后日志打印:

數據監聽日志

YANSHISHIJIQUNHUANJING,ZHESHIZHUDERIZHI。YINWEIWOYONGDESHIPUTONGJIANTING,SUOYIQITACHENGYUANMEIYOUFANYING。RUGUOYOUXIANGKANJIQUNJIANTINGXIAOGUODE,KEYIZIJIGAIXIASHISHI。

2.5 notification

先說通知和數據監聽的區別,兩者都有監聽類listen,但是通知還要定義發送publish。
數據監聽是被動的監聽數據,效率比較低,沒有針對性。
通知是需要主動發出,然后再監聽,效率高,有針對性。
比如說上文的student監聽,如果業務上只需關注student的age屬性變化,但是其他屬性發生變化時依然能夠監聽到,然后不得不做一些判斷,過濾。而通知只需要在發生變化時發送notification即可。

Yang:先說業務,發送一個學生告警的通知,接收到通知后將學生從數據庫移除。

BIANYIHOUSHENGCHENGJIANTINGFUWULEIHelloListener。

blueprint:
發送通知部分:
在藍圖中先引用聲明通知發送服務。

快3开奖结果查询JIANGFASONGFUWUJIADAOproviderDEbean。

通知發送服務

HEdatabrokerYIYANG,DUIYINGDEZAIproviderLEIZHONGZUOWEIGOUZAOFANGFACANSHU。

provider中通知發送服務

接收通知部分:
和rpc類似,先定義接收通知的類并實現上文提到的HelloListener。

快3开奖结果查询DINGYIJIESHOUTONGZHIDEbean,DUIYINGSHANGWENDEJIESHOUTONGZHILEI,BINGYINYONGTONGZHIJIANTINGFUWU。

Impl:
發送通知部分:
發送通知的服務上文已經說明在provider類中定義,只需要在業務代碼調用notificationPublishService對象發送通知信息就可以了。
快3开奖结果查询 本文定義了一個rpc專門用于發送通知,注意這個rpc不是必要的,通知在哪里發送都可以,這里只是為了方便演示。

接收通知部分:
實現HelloListener,重寫監聽方法,根據收到的學生逃課信息,將其從數據庫中刪除。

Rest:
先看操作前的數據

發送通知前數據

快3开奖结果查询FASONGnumber3XUESHENGDETAOKEXINXI。

調用發送通知的RPC

快3开奖结果查询ZAICHAKANSHUJUKU,SHUJUKUYIBEISHANCHU,SHUOMINGTONGZHIFASONGBINGCHULICHENGGONG。

發送通知后數據

2.6 remote-rpc

遠程rpc的作用:在集群環境中,北向一般會集成HA提供一個VIP供前端或者用戶使用,發送的請求到達哪臺集群節點是根據算法隨機的。如果是想訪問一臺特定節點的接口怎么辦?
這里就可以使用remote-rpc了,給每個節點一個id,訪問的時候把id帶上,請求不論發給哪個節點,最后業務都會routed到指定節點處理。
快3开奖结果查询 官方的controller指導手冊中稱為routed RPC,并講解了開發流程。但是看著沒有代碼那么清晰,我是參照samples中的實例來寫的。

Yang:快3开奖结果查询定義特有的屬性作為節點“id”。

快3开奖结果查询DINGYISHUXINGDEXINLEIXING,LEIXINGSHISHUJUKUDELUJINGIID(instance-identifier)。

JIEDIANSHUXINGLIEBIAOSHUJUKU

YUANCHENGrpc,inputLEIXINGSHIYINYONGLEGANGGANGDINGYIDEXINLEIXING。OutputSUIYI。

ExtDEZUOYONG:GUANFANGJIESHISHIWEILEDINGYILUYOURPC DEZAISHUJUSHUZHONGDEGAINIANWEIZHI,XUYAOSHIYONGcontext- reference(YUANWENSHIcontext-instance)yang-extMOXINGDEKUOZHANJINXINGJIANMO。ZHELI“controller-ip”YAOHEidentity controller-ipDUIYING。GENGDUOJIESHIKEYICANYUEGUANFANGWENDANGcontroller,WENMOYOULIANJIE。

Blueprint:
遠程rpc還在寫在之前的rpc類helloImpl里,這里要單獨注入遠程rpc。
Provider類中聲明遠程rpc注冊對象,并放到provider的bean中。

藍圖中遠程rpc注冊服務

Impl:
遠程rpc的注冊,Provider類中聲明rpcRegistration。

在初始化方法中通過rpcRegistration注冊節點特殊屬性“id”。也就是將當前節點的IP作為自己的key進行注冊。
兩個參數:類是yang中定義的identity,對象就是就是數據邏輯路徑。
本地ip的獲取是通過properties配置文件讀取的,文件存放在hello-karaf的config文件中。

快3开奖结果查询DAOZHELI,XIANGDANGYUZHUNBEIGONGZUOYIJINGWANCHENG。ZUIHOUSHUOZUIJIANDANDEYEWUDAIMA。DAYINRIZHI,RANHOUFANHUIDAIYOUDANGQIANJIEDIANIPDEFANHUIXINXI。

Rest:

調用遠程RPC

遠程RPC日志打印

KEYIKANDAO,WOSHIYONGDESHI162JIEDIANDErest,FASONGDEIIDCANSHUSHI163。ZHIXINGDEJIEGUOFANHUISHI163,YEWURIZHIYESHIDAYINZAI163DEKONGZHITAI。SHUOMINGremote(routed)rpcQINGQIUCHENGGONG。

其他:解釋一下遠程rpc的 input參數。

其實就是數據路徑。
快3开奖结果查询 hello是yang文件的名字,后面依次屬性關系看下圖:

input和container關系

XIANGMUBIANYIWANZHIHOU,ODLBAOZAIhello-karafDEtargetMULUXIA。DANSHIBAONEIBUBAOHANJIQUNPEIZHIJIAOBENHEip.propertiesWENJIAN,WODANDUBATAFANGZAILEhello-karafDEconfigWENJIANJIAZHONG。BIANYIZHIHOUJIDEBALIANGGEJIQUNPEIZHIWENJIANFANGJINodlDEbinMULU。ip.propertiesFANGZAIodlDEetcMULU。

集群配置文件

集群配置方法:環境是162.163.164 分別作為集群節點1.2.3
配置方法是:節點編號 + 按順序的排列IP。
在162節點:
./configure_cluster.sh 1 172.20.14.162 172.20.14.163 172.20.14.164
在163節點:
./configure_cluster.sh 2 172.20.14.162 172.20.14.163 172.20.14.164
在164節點:
./configure_cluster.sh 3 172.20.14.162 172.20.14.163 172.20.14.164

到此,所有內容講解結束。(feature,karaf實在說不動了,feature已經精簡到一個,應該非常好理解了,望諒解。)
講解還是比較偏向新手同學的,沒有特別專業的解釋,也沒有太多原理性的東西。說的錯誤和有爭議的地方希望大家指正,討論。
最后希望大家在閱讀后都能有所收獲,謝謝!

相關鏈接:
本文示例項目Github地址:

Yang rfc7950:

osgi-blueprint:

ODL官方Controller文檔:

ODL官方開發指導文檔:

ODL官方集群配置指導文檔:

快3开奖结果查询


  • 本站原創文章僅代表作者觀點,不代表SDNLAB立場。所有原創內容版權均屬SDNLAB,歡迎大家轉發分享。但未經授權,嚴禁任何媒體(平面媒體、網絡媒體、自媒體等)以及微信公眾號復制、轉載、摘編或以其他方式進行使用,轉載須注明來自 SDNLAB并附上本文鏈接。 本站中所有編譯類文章僅用于學習和交流目的,編譯工作遵照 CC 協議,如果有侵犯到您權益的地方,請及時聯系我們。
  • 本文鏈接http://cslinyu.com/23834.html
分享到:
相關文章
條評論

快3开奖结果查询

登錄后才可以評論

jays 發表于20-01-09
12