程序員老茶 |
🙈作者簡介:
練習時長兩年半的Java up主
🙉個人主頁:程序員老茶
🙊 P? ?S :點贊是免費的,卻可以讓寫博客的作者開心好久好久
😎
📚系列專欄:Java全棧,計算機系列(火速更新中)
💭格? ?言:種一棵樹最好的時間是十年前,其次是現在
🏡動動小手:點個關注不迷路,感謝寶子們一鍵三連
目錄
- 課程名:Java
- 內容/作用:知識點/設計/實驗/作業/練習
- 學習:SpringCloud服務拆分和遠程調用
- SpringCloud服務拆分和遠程調用
- 1.1.服務拆分原則
- 1.2.服務拆分示例
- 1.2.1.導入Sql語句
- 1.2.2.導入demo工程
- 1.3.實現遠程調用案例
- 1.3.1.案例需求:
- 1.3.2.注冊RestTemplate
- 1.3.3.實現遠程調用
- 1.4.提供者與消費者
- 總結
課程名:Java
內容/作用:知識點/設計/實驗/作業/練習
學習:SpringCloud服務拆分和遠程調用
SpringCloud服務拆分和遠程調用
任何分布式架構都離不開服務的拆分,微服務也是一樣。
1.1.服務拆分原則
這里我總結了微服務拆分時的幾個原則:
- 不同微服務,不要重復開發相同業務
- 微服務數據獨立,不要訪問其它微服務的數據庫
- 微服務可以將自己的業務暴露為接口,供其它微服務調用
1.2.服務拆分示例
以課前資料中的微服務cloud-demo為例,其結構如下:
cloud-demo:父工程,管理依賴
- order-service:訂單微服務,負責訂單相關業務
- user-service:用戶微服務,負責用戶相關業務
要求:
- 訂單微服務和用戶微服務都必須有各自的數據庫,相互獨立
- 訂單服務和用戶服務都對外暴露Restful的接口
- 訂單服務如果需要查詢用戶信息,只能調用用戶服務的Restful接口,不能查詢用戶數據庫
1.2.1.導入Sql語句
首先,將課前資料提供的cloud-order.sql
和cloud-user.sql
導入到mysql中:
cloud-user表中初始數據如下:
cloud-order表中初始數據如下:
cloud-order表中持有cloud-user表中的id字段。
1.2.2.導入demo工程
用IDEA導入課前資料提供的Demo:
項目結構如下:
導入后,會在IDEA右下角出現彈窗:
點擊彈窗,然后按下圖選擇:
會出現這樣的菜單:
配置下項目使用的JDK:
1.3.實現遠程調用案例
在order-service服務中,有一個根據id查詢訂單的接口:
根據id查詢訂單,返回值是Order對象,如圖:
其中的user為null
在user-service中有一個根據id查詢用戶的接口:
查詢的結果如圖:
1.3.1.案例需求:
修改order-service中的根據id查詢訂單業務,要求在查詢訂單的同時,根據訂單中包含的userId查詢出用戶信息,一起返回。
因此,我們需要在order-service中 向user-service發起一個http的請求,調用http://localhost:8081/user/{userId}這個接口。
大概的步驟是這樣的:
- 注冊一個RestTemplate的實例到Spring容器
- 修改order-service服務中的OrderService類中的queryOrderById方法,根據Order對象中的userId查詢User
- 將查詢的User填充到Order對象,一起返回
1.3.2.注冊RestTemplate
首先,我們在order-service服務中的OrderApplication啟動類中,注冊RestTemplate實例:
package cn.itcast.order;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
1.3.3.實現遠程調用
修改order-service服務中的cn.itcast.order.service包下的OrderService類中的queryOrderById方法:
1.4.提供者與消費者
在服務調用關系中,會有兩個不同的角色:
服務提供者:一次業務中,被其它微服務調用的服務。(提供接口給其它微服務)
服務消費者:一次業務中,調用其它微服務的服務。(調用其它微服務提供的接口)
但是,服務提供者與服務消費者的角色并不是絕對的,而是相對于業務而言。
如果服務A調用了服務B,而服務B又調用了服務C,服務B的角色是什么?
- 對于A調用B的業務而言:A是服務消費者,B是服務提供者
- 對于B調用C的業務而言:B是服務消費者,C是服務提供者
因此,服務B既可以是服務提供者,也可以是服務消費者。
總結
? ?感謝小伙伴們一鍵三連,咱們下期文章再見~
往期專欄 |
---|
Java全棧開發 |
數據結構與算法 |
計算機組成原理 |
操作系統 |
數據庫系統 |
物聯網控制原理與技術 |