這種架構的教程網上想必應該是比比皆是了,不過今天想自己嘗試一下。
首先是部署注冊中心,具體步驟就不再過多贅述。在注冊中心部署完成后,就開始provider的部署
先引入jar包
這里我的jdk版本是1.8,所以zkclient和dubbo都使用的最新版本,否則會報錯,原因是因為內部依賴的javaassist不兼容。
然后就是劃分項目結構
我用的maven做的項目結構劃分,服務提供模塊和消費模塊都依賴于業務模塊,服務提供模塊主要是向注冊中心注冊服務,而消費模塊主要是調用服務,
這是我理解的spring與dubbo之間的關系,首先一個業務需要抽象出一個接口,然后再進行實現。
現在spring一般都是直接配置掃描+注解的方式,所以在服務提供者中,要在實現類上加上相應的service注解。這里spring首先把類加載進容器中,然后再把這個加載好的類交給dubbo,dubbo把這個類的接口已經它的方法一起注冊到注冊中心去。
注冊成功后,接下來就是消費者調用服務,調用的流程正好跟注冊是相反的,首先是由dubbo從注冊表中加載需要的類,然后再將這個裝載成功的類交給spring容器使用(這里加載我猜是虛擬加載,讓spring相信真實存在這樣一個已經加載好的類,其實它的實體在provider那里)。然后我們就可以開心的使用spring干各種壞事了。
然而需要注意的是,我們因為習慣于使用spring的掃描,要對消費者模塊和提供者模塊的包路徑掃描做好區分,比如正確的路徑是消費者模塊:com.company.web,提供者模塊:com.company.provider
如果偷懶的話消費者模塊的掃描路徑設置為:com.company,那么在消費者模塊會出現bean重復加載的情況,spring會報錯,原因是dubbo加載一個給spring,spring自己又掃描加載一次。所以在消費者模塊注意不要把服務的實現類給掃描進去。
通過以上簡單的幾個步驟基本上已經把一個簡單的分布式架構系統搭好了,至于你是選擇放在一個服務器上還是多個服務器上,那得看你的資源是否豐富了。