springboot 多模塊 -- 將web拆分出去 - 流動計算架構

来源:https://www.cnblogs.com/elvinle/archive/2018/01/09/8251585.html
-Advertisement-
Play Games

前言: 之前將各層都拆分出去, 作為一個獨立的可替換的子模塊. 感覺比以前確實是靈活了一些. 不管是電商項目, 還是現在公司做的項目, 其中, 有很多的業務邏輯, 都是一樣的, 但是由於不在一個系統中, 大家需要進行重覆的工作. 有的拷貝還好, 但是有的, 沒法直接拷貝. 相當的蛋疼. 能不能, 將 ...


前言:

  之前將各層都拆分出去, 作為一個獨立的可替換的子模塊. 感覺比以前確實是靈活了一些.

  不管是電商項目, 還是現在公司做的項目, 其中, 有很多的業務邏輯, 都是一樣的, 但是由於不在一個系統中, 大家需要進行重覆的工作. 有的拷貝還好, 但是有的, 沒法直接拷貝. 相當的蛋疼. 能不能, 將業務邏輯獨立出去, 供所有的展示層調用呢? 

  是不是可以使用前一篇介紹的 dubbo 呢?

 

框架改造:

  前一篇, 通過多模塊, 將各層拆分出去, 各自變成了一個獨立的項目. 這裡, 先將之前的稍微修改了下, 主要是改了項目名稱, 加了一個common項目, 放一些共用的東西.

  common我也是用 springboot 建的, 只不過將入口那裡註釋掉了. 這裡, 除了web有入口程式, 其他的入口全都註釋掉了.

  

改造後的目錄結構:

  

這裡要註意開啟service中的入口程式, 創建application.yml文件, 將之前在web中, 對mybatis的配置部分, 全部遷移到service中, 包括 MybatisConfig 和 MybatisMapperScannerConfig.

遷移哦, 不是複製. web端不需要這些東西了. 

具體的改造過程, 就不貼了, 代碼我會上傳到碼雲中. 地址: https://gitee.com/elvinle/bookshop/tree/master/bookshop

 

集成dubbo zookeeper:

1. 業務層改造 -- 服務端

pom.xml 中加入:

<!--dubbo相關-->
<!-- https://mvnrepository.com/artifact/com.gitee.reger/spring-boot-starter-dubbo -->
<dependency>
    <groupId>com.gitee.reger</groupId>
    <artifactId>spring-boot-starter-dubbo</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.jboss.netty</groupId>
            <artifactId>netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>

application.yml:

spring:
  dubbo:
    application: bookshop_provider
    registry:
      address: 192.168.153.129
      protocol: zookeeper
      port: 2181
    protocol:
      name: dubbo
      port: 20880
    base-package: cn.elvinle.manager.simpl

application : 名稱自己隨便取一個都可以, 不重覆就好.

address : 前面zookeeper部署的電腦ip.

port: zookeeper服務的埠號

registry.protocol : 註冊協議, zookeeper註冊中心, 預設2181埠

dubbo.protocol : 服務協議, 使用 dubbo

dubbo.port : 服務埠, 預設20880

timeout : 調用超時, 預設為1000ms.

base-package : 客戶端被掃描的包

這裡使用的是單機部署, 沒有使用zookeeper集群. 後面有機會的話, 會使用到.

代碼改造:

package cn.elvinle.manager.simpl;

import cn.elvinle.manager.dao.mapper.UserMapper;
import cn.elvinle.manager.pojo.User;
import cn.elvinle.manager.service.UserService;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@Service
public class UserSImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getAll() {

        List<User> list = userMapper.getAll();

        System.out.println("服務端讀取到數據:" + list);

        return list;
    }
}

這裡貌似與之前的沒什麼不同, 但是, 這裡的Service 註解, 不是之前的那個了, 而是 com.alibaba.dubbo.config.annotation.Service

 

2. web 集成 -- 客戶端

pom.xml文件加入引用:

<!--dubbo相關-->
<!-- https://mvnrepository.com/artifact/com.gitee.reger/spring-boot-starter-dubbo -->
<dependency>
    <groupId>com.gitee.reger</groupId>
    <artifactId>spring-boot-starter-dubbo</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.jboss.netty</groupId>
            <artifactId>netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>

application.yml  

spring:
  dubbo:
    application: web_consumer
    registry:
      address: 192.168.153.129
      protocol: zookeeper
      port: 2181
    base-package: cn.elvinle.manager.web.controller
    consumer:
      timeout: 10000 

代碼改造:

package cn.elvinle.web.controller;

import cn.elvinle.manager.pojo.User;
import cn.elvinle.manager.service.UserService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("user")
public class UserController {

    @Reference
    private UserService userService;

    @RequestMapping("index")
    public List<User> index(){

        List<User> all = userService.getAll();

        System.out.println("客戶端讀取到數據: " + all);

        return all;
    }
}

這裡, 可以看到, 不再是使用Autowire了, 而是使用Reference註解, 是dubbo裡面的.

 3. 註意:

  這裡有個需要註意的地方, 就是傳輸的類, 必須實現  Serializable 介面, 表示支持序列化, 否則會報錯的.

 

結果展示:

從瀏覽器上看, 確實訪問到了數據. 再來看一下, 後臺可列印了我要的信息.

再來看一下註冊監測中心:

看看提供者:

消費者:

 

 

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (一)引用數組元素時指針的運算 如果指針變數p已指向數組中的一個元素,則p+1指向同一數組的下一個元素,p-1指向同一數組的上一個元素。 附:P+1並不是簡單將值+1,而是加上元素所占的位元組數。 int、float、long都是占4個位元組,char占一個位元組。 (二)*p++、*(p++)、*(++ ...
  • 今天是期末考第一天,也是開始接觸Java第一天,無心複習,那就來學點新的東西咯!! Java三大平臺 1、Java SE 分為四個部分:JVM(虛擬機),JRE(運行環境),JDK(開發工具包),Java 2、Java EE 3、Java ME (用的少了) Java開發環境配置 記事本/Notep ...
  • 接觸python有一段時間了,一直想寫個爬蟲,然而最近臨近期末實在沒什麼時間,就做了個demo出來,有的時候會出現一些error,但是跑還是能跑起來,下個幾百張圖片還是沒問題,剩下的問題估計要到放假才能解決好了,先把代碼放上來,以供交流,歡迎大家提出指導意見 進入正題 我寫這個爬蟲的時候參考了純潔的 ...
  • 一、break語句 應用範圍:選擇結構和迴圈結構(多個for迴圈嵌套,跳出離break最近的一個for迴圈) 二、continue語句 應用範圍:只能用於迴圈結構(只作用於當前迴圈。結束本次迴圈,繼續下次迴圈) 結果是:2,4,6,8,10 ...
  •  對於java,其是不支持直接創建泛型數組的。當採用如下的方式去創建一個泛型數組時,其會出現錯誤,編譯無法通過的情況。 但是,在java中,其卻可以創建泛型類型的數組變數,如下所示的代碼,其並不會出現錯誤的情況。  一個問題是,我們想要創建一個泛型類型的數組變數,那麼應當怎麼辦? ...
  • assert 0.猜猜 (x < y and [x] or [y])[0] 實現什麼樣的功能? 若x<y為真,則返回x (參照兩邊為數的邏輯運算:A and B,若A為真,則返回B,反之,返回A A or B ,若A為真,則返回B,反之,返回A )(其中[X][0]表示列表中的第一個元素即X) 若x ...
  • 1. python特性(來自百度百科) 1) 解釋性:一個用編譯性語言比如C或C++寫的程式可以從源文件(即C或C++語言)轉換到一個你的電腦使用的語言(二進位代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。 運行程式的時候,連接/轉載器軟體把你的程式從硬碟複製到記憶體中並且運行。而Py ...
  • 本文只討論二維空間中的曼哈頓距離與切比雪夫距離 曼哈頓距離 定義 設平面空間記憶體在兩點,它們的坐標為$(x1,y1)$,$(x2,y2)$ 則$dis=|x1-x2|+|y1-y2|$ 即兩點橫縱坐標差之和 煮個慄子 如圖所示,圖中$A,B$兩點的曼哈頓距離為$AC+BC=4+3=7$ 切比雪夫距離 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...