服務劃分
微服務列表
- 購物車
- 登入驗證
- 產品
叢集列表
- web叢集:ribbon客戶端負載均衡,請求來自於硬體負載F5或者nginx,(本機執行)
- Eureka Server叢集,3例項192.168.0.117~192.168.0.119,埠號10000
- 微服務叢集:整合Eureka Client
- 購物車微服務3例項192.168.0.117~192.168.0.119,服務命名micro-cart
- 登入驗證微服務3例項192.168.0.117~192.168.0.119,服務命名micro-login
- 產品微服務3例項192.168.0.117~192.168.0.119,服務命名micro-product
- redis叢集(暫時單機)
- mysql主備(暫時單機)
- 全域性配置中心
Eureka Server叢集
- 程式碼:https://gitee.com/steveGuRen/spring-cloud-example/tree/master/Spring-cloud-eurekaserver
三個例項配置檔案如下,這裡並沒有用類似ognl表示式的配置,配置檔案依次是application-eureka119.yml~application-eureka117.yml
server:
port: 10000
eureka:
instance:
hostname: 192.168.0.119
client:
serviceUrl:
defaultZone: http://192.168.0.117:10000/eureka/,http://192.168.0.118:10000/eureka/,http://192.168.0.119:10000/eureka/
server:
port: 10000
eureka:
instance:
hostname: 192.168.0.118
client:
serviceUrl:
defaultZone: http://192.168.0.117:10000/eureka/,http://192.168.0.118:10000/eureka/,http://192.168.0.119:10000/eureka/
server:
port: 10000
eureka:
instance:
hostname: 192.168.0.117
client:
serviceUrl:
defaultZone: http://192.168.0.117:10000/eureka/,http://192.168.0.118:10000/eureka/,http://192.168.0.119:10000/eureka/
編譯後用如下分別用以下命令執行jar檔案,執行時指定spring.profiles.active引數,spring.profiles.active的用法可以自行百度
java -jar ~/spring-cloud-example/Spring-cloud-eurekaserver/target/Spring-cloud-eurekaserver-0.0.1-SNAPSHOT.jar --spring.profiles.active=euraka117
java -jar ~/spring-cloud-example/Spring-cloud-eurekaserver/target/Spring-cloud-eurekaserver-0.0.1-SNAPSHOT.jar --spring.profiles.active=euraka118
java -jar ~/spring-cloud-example/Spring-cloud-eurekaserver/target/Spring-cloud-eurekaserver-0.0.1-SNAPSHOT.jar --spring.profiles.active=euraka119
登入驗證微服務實現
程式碼:https://gitee.com/steveGuRen/spring-cloud-example/tree/master/Spring-cloud-micro-CardRecord
三個配置檔案如下:application-117.yml~application-119.xml,分別對應IP地址192.168.0.117到119的配置
整合了Eureka client和server的依賴,由於是登入驗證服務,所以用redis來儲存session,將狀態儲存在儲存叢集,目前還是單機,微服務繼續保持無狀態(stateless),從而能夠輕易的進行水平擴充套件
spring session的註解配置以及redis的註解配置還有datasource的註解配置可以檢視com.example.demo.config裡面的3個配置類下面的程式碼關鍵的是用了@EnableDiscoveryClient註解,用於將該專案spring mvc的@RequestMapping對應的服務地址註冊到Eureka server叢集
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@MapperScan("com.example.demo")
@EnableDiscoveryClient
public class SpringCloudMicroCardRecordApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudMicroCardRecordApplication.class, args);
}
}
- 下面的程式碼使用spring session儲存session,實際上spring session只要引用相關的依賴配置好redis的相關配置即可,難度不高。
@Controller
@RequestMapping("/account")
@ResponseBody
public class AccountController {
@Autowired
private RedisService redisService;
@Autowired
private AccountService accountService;
private String PRIFIX_USER_SESSION = "PRIFIX_USER_SESSION";
@RequestMapping(value = "login", method = RequestMethod.POST)
public ResourceSupport login(HttpServletRequest request, String username, String password) {
Account accont = accountService.login(username, password);
ResultResource result = new ResultResource();
if (accont != null) {
//TODO save login info to redis and return
String key = PRIFIX_USER_SESSION + ":" + accont.getName() + ":name";
request.getSession().setAttribute(key, accont.getName());
result.setSuccess(true);
return result;
} else {
//TODO return failed result
result.setSuccess(false);
return result;
}
}
}
- Eureka叢集和微服務叢集都啟動後,可以看到instances currently registered with Eureka裡面有兩個例項,例項名實際上顯示的是yml裡面配置的spring.application.name的名字,然後還能看到對應的數量以及對應的服務例項地址,按f12瀏覽器除錯可以看到裡面暴露的具體訪問地址
Web叢集
-
程式碼:https://gitee.com/steveGuRen/spring-cloud-example/tree/master/Spring-cloud-web
剩下的就是web叢集了,web叢集、微服務叢集、Eureka server叢集的關係如下圖,由於只是模擬,所以Web叢集和微服務叢集的ip地址是一樣的,Web叢集使用Ribbon客戶端負載均衡 首先使用RestTemplate作為請求微服務的框架,Ribbon通過一個加上了@LoadBalanced註解的RestTemplate物件來實現負載均衡
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudWebApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(SpringCloudWebApplication.class, args);
}
}
- 通過http://[服務名稱大寫]/[服務地址]的格式,可以使用restTemplate諸如postForEntity的方法實現微服務的遠端請求,Ribbon預設會以輪詢的方式去進行將請求分配到不同的微服務例項上面去
@RestController
public class SimpleController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/account/login", method = RequestMethod.POST)
@ResponseBody
public String login(Account loginInfo) {
ResponseEntity<String> response = restTemplate.postForEntity("http://MONO-ESHOP-MICRO-LOGIN/account/login", loginInfo, String.class);
return response.getBody();
}
}
- aplication.yml配置
server:
port: 8081
servlet:
context-path: /
tomcat:
uri-encoding: UTF-8
eureka:
client:
serviceUrl:
defaultZone: http://192.168.0.117:10000/eureka/,http://192.168.0.118:10000/eureka/,http://192.168.0.119:10000/eureka/
spring:
application:
name: web
redis:
host: 192.168.0.117
port: 6379
password:
相關文章
- 如何劃分微服務微服務
- 微服務劃分原則微服務
- 微服務劃分的姿勢微服務
- datatables服務端分頁服務端
- 劃分微服務邊界的5個特徵微服務特徵
- 4.2.1.10 為您的應用程式計劃服務
- spark-stage任務劃分、sparkclient執行模式Sparkclient模式
- 關於微服務劃分的一些思考微服務
- 劃分樹
- 3 分鐘搞定 Vue 2.0 服務端渲染Vue服務端
- WAF的幾種劃分方法和劃分型別型別
- Serverless 微服務實踐-移動應用包分發服務Server微服務
- zone的劃分
- 子網劃分
- 資料劃分
- 單詞劃分
- 三十分鐘快速搭建serverless網盤服務Server
- 物業行業增值服務條線數字化規劃行業
- 索尼投資Discord,計劃將Discord與PSN服務深度融合
- 動態規劃之數的劃分動態規劃
- 集合劃分 題解
- 01 分數規劃
- 01分數規劃
- 陣列元素劃分陣列
- 玩轉AIGC,5分鐘 Serverless 部署 Stable Diffustion 服務AIGCServer
- 五分鐘給你的 gRPC服務 加上 HTTP 介面RPCHTTP
- 十分鐘學會Golang開發gRPC服務GolangRPC
- 3分鐘帶你瞭解負載均衡服務負載
- 埃森哲:86%的歐洲公共服務計劃增加AI支出AI
- 等長子網劃分、變長子網劃分(網路整理)
- 搜尋線上服務的儲存計算分離
- Nginx部署前後端分離服務以及配置說明Nginx後端
- Drive.ai計劃啟動自動駕駛網約車服務AI自動駕駛
- Linux 上如何劃分VLANLinux
- 可落地的DDD(4)-如何利用DDD進行微服務的劃分(2)微服務
- 【TCP/IP】IP地址的劃分及其分類TCP
- 從零開始系列-Laravel編寫api服務介面:13.計劃任務和佇列LaravelAPI佇列
- 2015-2025年按職位資訊來源劃分的中國招聘服務市場規模(附原資料表)