傳統項目:java
傳統項目的業務邏輯相對更加複雜。由於更多的是公司內網操做。共享少,可參考的項目少linux
互聯網項目git
瀑布模式:程序員
從1-5依次執行開發步驟,前面的執行完畢才執行下面的步驟。比較浪費人力資源。耗費時間。公司通常不採用github
敏捷開發:web
每一步驟完成一部分即開啓下一步驟。保證了每一個過程當中人員的充分利用。算法
迭代週期每部分完成所須要的時間稱爲一個迭代週期。西安地區通常爲14天。spring
單一應用架構數據庫
缺點:全部代碼在一塊兒,難於維護,啓動慢,性能低spring-mvc
垂直架構(MVC思想)
將原來單一架構中,具備相同功能的模塊獨立起來,放在不一樣的項目中。造成幾個垂直關係的架構。
缺點:這些項目之間不通訊。代碼仍然冗餘
RPC:遠程過程調用
垂直架構再細分,而且項目間通訊
缺點:服務的提供方,被服務消費方調用。在消費方維護服務提供方的(ip:端口/路徑),當提供方發生變化,消費方也須要修改代碼來應對。耦合大
SOA:面向服務
註冊中心,服務治理。
dubbox就是個服務框架,若是沒有分佈式的需求,實際上是不須要用的,只有在分佈式的時候,纔有dubbox這樣的分佈式服務框架的需求,而且本質上是個服務調用的東東,說白了就是個遠程服務調用的分佈式框架。
Provider: 暴露服務的服務提供方。(Service)
Consumer: 調用遠程服務的服務消費方。(Controller)
Registry: 服務註冊與發現的註冊中心。(Dubbo)
Monitor: 統計服務的調用次調和調用時間的監控中心。(能夠在安裝Dubbo的Linux系統的TomCat中配置服務器監控項目以管理Dubbo)
Container: 服務運行容器。
調用關係說明
長鏈接:每次通訊完畢後,不會關閉鏈接,這樣就能夠作到鏈接的複用。長鏈接的好處即是省去了建立鏈接的耗時。
心跳事件:客戶端會開啓一個定時任務,定時對已創建鏈接的對端應用發送心跳請求,服務端則須要特殊處理該請求並給出響應。若是長時間沒有響應。客戶端會斷開鏈接
短鏈接:每次通訊時,建立 Socket;一次通訊結束,調用 socket.close()。這就是通常意義上的短鏈接,短鏈接的好處是管理起來比較簡單,存在的鏈接都是可用的鏈接,不須要額外的控制手段。
官方推薦使用 zookeeper 註冊中心。註冊中心負責服務地址的註冊與查找,至關於目錄服務,服務提供者和消費者只在啓動時與註冊中心交互,註冊中心不轉發請求,壓力較小。
Zookeeper 是 Apacahe Hadoop 的子項目,是一個樹型的目錄服務,支持變動推送,適合做爲Dubbox 服務的註冊中心,工業強度較高,可用於生產環境。
這裏我把zk安裝在/usr/local/zookeeper下。
linux下編輯文件
開啓zk服務: ./zkServer.sh start
查看zk服務狀態; ./zkServer.sh status
關閉zk服務: ./zkServer.sh stop
複製代碼
注意:安裝部署好zk後,關閉虛擬機時選擇掛起,不要直接關閉。下次啓動虛擬機就不須要再手動啓動服務了
直接拷貝項目所需的完整倉庫。並在本地mvn的配置文件中配置阿里雲私服
用來給IDE添增強大的提示功能,IDEA好像自己很強大不須要。實際因爲4.2版本可能比較舊。須要手動添加,下面有方法
配置成僅主機模式,且IP第三段設置成25,方便後期使用。DFS
配置完成後,開啓Linux,啓動zk服務。
Service編寫:
建立Maven項目,打包方式war。導入spring、dubbo相關依賴座標。導入tomcat插件,設置端口8081
建立service包,Service接口,實現類及其中的方法。Sevice方法上加上@Service註解
import com.alibaba.dubbo.config.annotation.Service;
// 注意:此Service必須是Dubbo提供的Service
@Service
public class ShowServiceImpl implements IShowService {
複製代碼
配置web.xml。加載Spring容器
配置applicationContext.xml文件。添加Dubbo相關約束和命名空間。配置Dubbo鏈接
<!--配置服務名-->
<dubbo:application name="dubbodemo-service"/>
<!--配置註冊中心,IP,端口-->
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<!--掃描@Service註解-->
<dubbo:annotation package="cn.keats.dubbodemo.service" />
複製代碼
測試運行:推薦使用IDEA MAVEN HELPER 插件啓動服務器。 file --> settings --> plygins --> 檢索並安裝 maven helper 重啓IDEA
Controller編寫
建立maven項目,打包依舊war,導入座標。設置tomcat端口 8082 和Service保持不一致,避免端口衝突
建立controller包,拷貝Service接口,遠程注入Service接口。寫方法,加上@RequestMapping(映射路徑) @ResponseBody(設置響應的字符串用做顯示而不是用做跳轉的頁面路徑)
配置web.xml 配置post請求亂碼處理,配置DispacherServlet
<!-- 解決post亂碼 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定加載的配置文件 ,經過參數contextConfigLocation加載-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-web.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
複製代碼
配置spring-mvc核心配置文件,而且配置Dubbo鏈接。注意:這裏由於Service接口是從Service項目拷貝過來的,要求包路徑一致
啓動測試。若是服務超時未鏈接,能夠嘗試訪問Tomcat服務器。有多是防火牆阻止了系列請求。關閉防火牆便可