1. 程式人生 > >day69_淘淘商城專案_02

day69_淘淘商城專案_02

  • 課程計劃
    • 第二天:商品列表功能實現
  • 1、功能分析
  • 2、服務中介軟體Dubbo
  • 3、SSM框架整合+Zookeeper
  • 4、Dubbo的Admin管理平臺
  • 5、後臺商品列表查詢功能實現
  • 5、dubbo監控中心的搭建

1、功能分析

1.1、後臺系統所用的技術

  • 框架:Spring + SpringMVC + Mybatis + Dubbo
  • 前端:EasyUI
  • 資料庫:MySQL

1.2、建立資料庫

  • 1、安裝mysql資料庫,要求5.5以上版本。
  • 2、在mysql中建立一個taotao資料庫。
  • 3、將建立資料庫的指令碼taotao.sql匯入到taotao中。

1.3、Mybatis逆向工程

  • 使用mybatis官方提供的mybatis-generator生成pojo、mapper介面及對映檔案。
  • 並且將pojo放到toatao-manager-pojo工程中。
  • 將mapper介面及對映檔案放到taotao-manager-dao工程中。
    • 注意1:因為涉及到各個工程(系統)之間來回傳遞物件,所以使用時需要對涉及到的POJO實現序列化介面。
      • 我們發現mybatis的外掛,有一個可以自動給所有pojo實現序列化介面(example除外)
    • 注意2:如果生成的pojo能夠有toString()的重寫會給開發、除錯帶來很大的方便,所以我們也將生成的pojo重寫toString()方法。
      • 同樣使用mybatis的外掛。
    • 即我們在使用Mybatis逆向工程的時候,在其配置檔案generatorConfig.xml中配置下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">


<generatorConfiguration>
        <!-- 配置生成pojo的序列化的外掛,mybatis支援很多外掛,這些外掛都在 org.mybatis.generator.plugins包下  -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

        <!--配置生成pojo的tostring()方法的外掛,mybatis支援很多外掛,這些外掛都在 org.mybatis.generator.plugins包下 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

        <commentGenerator>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--資料庫連線的資訊:驅動類、連線地址、使用者名稱、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/taotao" userId="root" password="root">

        </jdbcConnection>
        <!-- 預設false時,把JDBC DECIMAL 和 NUMERIC 型別解析為 Integer
              當為 true時,把JDBC DECIMAL 和  NUMERIC 型別解析為java.math.BigDecimal -->

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成PO類的位置 -->
        <javaModelGenerator targetPackage="com.taotao.pojo" targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從資料庫返回的值被清理前後的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper對映檔案生成的位置 -->
        <sqlMapGenerator targetPackage="com.taotao.mapper" targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper介面生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.taotao.mapper" targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定資料庫表 -->
        <table schema="" tableName="tb_content"></table>
        <table schema="" tableName="tb_content_category"></table>
        <table schema="" tableName="tb_item"></table>
        <table schema="" tableName="tb_item_cat"></table>
        <table schema="" tableName="tb_item_desc"></table>
        <table schema="" tableName="tb_item_param"></table>
        <table schema="" tableName="tb_item_param_item"></table>
        <table schema="" tableName="tb_order"></table>
        <table schema="" tableName="tb_order_item"></table>
        <table schema="" tableName="tb_order_shipping"></table>
        <table schema="" tableName="tb_user"></table>
    </context>
</generatorConfiguration>

1.4、系統間通訊問題

1.4.1、分析

  由於淘淘商城是基於soa的架構,表現層和服務層是不同的工程。所以要實現商品列表查詢需要兩個系統之間進行通訊。
  如何實現遠端通訊?

  • 1、使用Webservice:效率不高,它是基於soap協議(html+xml)。專案中不推薦使用。優點是:跨語言、跨平臺。適用於兩個公司之間。
  • 2、使用Restful形式的服務:http+json。很多專案中應用。如果服務越來越多,服務與服務之間的呼叫關係複雜,呼叫服務的URL管理複雜,什麼時候新增機器難以確定。 需要治療服務。適用於中小型企業。
  • 3、使用Dubbo:使用RPC協議進行遠端呼叫,直接使用socket通訊傳輸效率高,並且可以統計出系統之間的呼叫關係、呼叫次數,管理服務。適用於大型企業。缺點:不能跨語言。只能java語言。

2、Dubbo

2.1、什麼是dubbo

  最新中文網址:https://dubbo.incubator.apache.org/zh-cn/index.html
  DUBBO是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,是阿里巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支援,並被廣泛應用於阿里巴巴集團的各成員站點。
  隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。

  • 單一應用架構
    當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
    此時,用於簡化增刪改查工作量的資料訪問框架(ORM)是關鍵。
  • 垂直應用架構
    當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
    此時,用於加速前端頁面開發的Web框架(MVC)是關鍵。
  • 分散式服務架構
    當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
    此時,用於提高業務複用及整合的分散式服務框架(RPC)是關鍵。
  • 流動計算架構
    當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。
    此時,用於提高機器利用率的資源排程和治理中心(SOA)是關鍵。
  • Dubbo就是資源排程和治理中心的管理工具
  • Dubbo 就是類似於webservice的關於系統之間通訊的框架,並可以統計管理服務直接的呼叫情況(包括服務被誰呼叫了,呼叫的次數是如何,以及服務的使用狀況)。

2.2、Dubbo的架構

  • Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現。
  • 節點角色說明:
    • Provider: 暴露服務的服務提供方。
    • Consumer: 呼叫遠端服務的服務消費方。
    • Registry: 服務註冊與發現的註冊中心。
    • Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。
    • Container: 服務執行容器。
  • 呼叫關係說明: