一、專案結構
專案結構:
如下圖:
專案工程簡介:
changgou_auth: oauth2.0授權認證管理中心
changgou_common:公共模組
changgou_common_db:公共模組
changgou_eureka:註冊中心
shangchneg_reverser:
changgou_gateway: 閘道器模組。
changgou_service: 微服務模組,該模組用於存放所有獨立的微服務工程。
changgou_service_api: 對應工程的JavaBean、Feign、以及Hystrix配置,該工程主要對外提供依賴。
changgou_transaction_fescar: 分散式事務模組,將分散式事務抽取到該工程中,任何工程如需要使用分散式事務,只需依賴該工程即可。
changgou_web: web服務工程,對應功能模組如需要呼叫多個微服務,可以將他們寫入到該模組中,例如網站後臺、網站前臺等
二、工程搭建
工程搭建步驟:
步驟一:建立父工程changgou_parent,刪除src檔案,並配置pom.xml檔案
建立父工程changgou_parent,並配置pom.xml檔案
步驟二:建立二級父工程
建立changgou_gateway、changgou_service、changgou_service_api、changgou_web工程,工程全部為pom工程,並將所有工程的src檔案刪除。
步驟三:Eureka微服務搭建
建立changgou_eureka模組,並配置pom.xml檔案,引入依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
建立配置檔案application.yml,新增如下配置
server:
port: 6868
eureka:
client:
register-with-eureka: false #是否將自己註冊到eureka中
fetch-registry: false #是否從eureka中獲取資訊
service-url:
defaultZone: http://127.0.0.1:${server.port}/eureka/
建立包com.changgou.eureka ,包下建立啟動類
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class); } }
步驟四:公共模組搭建
建立全域性公共模組changgou_common,並配置pom.xml
<dependencies> <!--web起步依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- redis 使用--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>
建立com.changgou.entity包 ,包下封裝相關公共實體類。
返回結果實體類:
package com.changgou.entity; /** * 返回結果實體類 */ public class Result<T> { private boolean flag;//是否成功 private Integer code;//返回碼 private String message;//返回訊息 private T data;//返回資料 public Result(boolean flag, Integer code, String message, Object data) { this.flag = flag; this.code = code; this.message = message; this.data = (T)data; } public Result(boolean flag, Integer code, String message) { this.flag = flag; this.code = code; this.message = message; } public Result() { this.flag = true; this.code = StatusCode.OK; this.message = "執行成功"; } //getter and setter.. }
分頁結果類:
/** * 分頁結果類 */ public class PageResult<T> { private Long total;//總記錄數 private List<T> rows;//記錄 public PageResult(Long total, List<T> rows) { this.total = total; this.rows = rows; } public PageResult() { } //getter and setter ...... }
返回狀態碼實體類:
/** * 返回狀態碼實體類 */ public class StatusCode { public static final int OK=20000;//成功 public static final int ERROR =20001;//失敗 public static final int LOGINERROR =20002;//使用者名稱或密碼錯誤 public static final int ACCESSERROR =20003;//許可權不足 public static final int REMOTEERROR =20004;//遠端呼叫失敗 public static final int REPERROR =20005;//重複操作 }
步驟五:資料訪問公共模組搭建
這個公共模組是連線mysql資料庫的公共微服務模組,所以需要連線mysql的微服務都繼承自此工程。
建立公共模組changgou_common_db,並配置pom檔案,引入依賴
<dependencies> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou_common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--通用mapper起步依賴--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.4</version> </dependency> <!--MySQL資料庫驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--mybatis分頁外掛--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> </dependencies>
步驟六:商品微服務搭建
1)商品微服務API工程搭建
在changgou_service_api 模組中,引入依賴 feign依賴和java實體類的依賴,在changgou_service_api 下建立changgou_service_goods_api子模組並新增common依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> </dependencies>
2)商品微服務API工程搭建
在changgou_service工程下建立changgou_service_goods子模組 ,配置pom.xml檔案,引入依賴
<dependencies> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou_common_db</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.changgou</groupId> <artifactId>changgou_service_goods_api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
在changgou_service_goods工程中,建立配置檔案application.yml
server: port: 9011 spring: application: name: goods datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.200.128:3306/changgou_goods?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root eureka: client: service-url: defaultZone: http://127.0.0.1:6868/eureka instance: prefer-ip-address: true feign: hystrix: enabled: true #hystrix 配置 hystrix: command: default: execution: timeout: #如果enabled設定為false,則請求超時交給ribbon控制 enabled: true isolation: strategy: SEMAPHORE
在changgou_service_goods工程中,com.changgou.goods 包下,建立啟動類
@SpringBootApplication @EnableEurekaClient @MapperScan(basePackages = {"com.changgou.goods.dao"}) public class GoodsApplication { public static void main(String[] args) { SpringApplication.run(GoodsApplication.class); } }
步驟七:商品微服務測試
商品微服務測試:測試服務是否可以正常的被訪問以及操作,
在changgou_service_goods工程中,建立測試controller
1 package com.changgou.service.goods.controller; 2 3 import org.springframework.web.bind.annotation.GetMapping; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RestController; 6 7 @RequestMapping("/demo") 8 @RestController //@controller,@responseBody 9 public class DemoController { 10 11 @GetMapping("/test") 12 public String demo(){ 13 return "demo message"; 14 } 15 }
啟動changgou_service_goods工程,檢視Eureka server 管理後臺,發現GOODS服務成功註冊到E註冊中心,埠號為9011。瀏覽器訪問localhost:9011/demo/test,正常訪問,測試透過,商品微服務搭建成功。