分佈式解決方案
nacos 配置中心、註冊中心
ribbon 負載均衡
openfeign rpc調用
sentinel 流量控制、熔斷
gateway api網關
sleuth 調用鏈監控
seata 分佈式事務
nacos簡單配置
- 在 common 模塊中,導入nacos 相關依賴。這樣各個微服務模塊都可以使用。
- 配置文件改爲 bootstrap.yml 其中只寫服務名稱、端口、環境、nacos 地址
spring:
profiles:
active: dev # 環境
cloud:
nacos:
discovery:# nacos 註冊中心
server-addr: 192.168.2.3:8848
config: // nacos 配置中心
server-addr: 192.168.2.3:8848
file-extension: yaml
namespace: product # 讀取配置時所在空間
application:
name: gulimall-product # 服務名稱
server:
port: 35200
main函數主啓動上,添加服務發現註解@EnableDiscoveryClient
- 在 nacos 網頁上添加namespace和每個服務對應的配置信息
注意 Date Id 按照 服務名-環境.yaml 書寫
nacos 持久化
- 首先準備好相關數據庫。建表語句如下。(踩坑nacos 不支持mysql utf8mb4,所以不要在 my.cnf 中指定這種字符集)
https://blog.csdn.net/samHuangLiang/article/details/104966744
- 修改數據庫的隔離級別
SET @@transaction_isolation=‘READ-COMMITTED’;
- 下載 docker 環境 nacos,並啓動
docker pull nacos/nacos-server:1.2.1
docker run --env MODE=standalone --name nacosGrain -d -p 8848:8848 nacos/nacos-server:1.2.1
- 進入容器配置 nacos
docker exec -it nacosGrain bash
vi conf/application.properties
修改數據庫相關配置
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_SERVER_PORT:8848}
spring.datasource.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://192.168.2.3:23306/gulimall_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
# db.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
gateway 微服務網關搭建
- 新建 gulimall-gateway 模塊,引入 gateway 依賴和 common 依賴
- 主啓動加上 @EnableDiscoveryClient
- 配置文件
spring:
application:
name: gulimall-gateway
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 192.168.2.13:8848
config:
server-addr: 192.168.2.13:8848
file-extension: yaml
namespace: gateway
- nacos 中配置文件
spring:
cloud:
gateway:
routes:
- id: route_baidu
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: route_qq
uri: https://www.qq.com
predicates:
- Query=url,qq
server:
port: 20088
- 測試
踩坑。如果在啓動網關時,報錯:沒有找到數據庫配置信息,那麼在main函數上加上
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})