100元網(wǎng)站建設(shè)寧波網(wǎng)絡(luò)推廣平臺
Nacos服務(wù)搭建
我們首先在Nacos的GitHub中下載相關(guān)的安裝文件。https://github.com/alibaba/nacos/releases
但是因?yàn)榉?wù)器在國外,所以我們直接給大家提供了對應(yīng)的安裝文件。直接解壓縮到非中文的目錄下,然后啟動即可
服務(wù)訪問的地址是:http://localhost:8848/nacos
Nacos服務(wù)注冊
引入相關(guān)的依賴文件:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
放開注冊中心:@EnableDiscoveryClient
// 放開注冊中心
@EnableDiscoveryClient
@SpringBootApplication
// 指定Mapper接口對應(yīng)的路徑
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication {public static void main(String[] args) {SpringApplication.run(MallProducetApplication.class, args);}}
然后需要在配置問中配置注冊中心的相關(guān)信息
然后重啟服務(wù),我們就可以在注冊中心中發(fā)現(xiàn)對應(yīng)的服務(wù)注冊信息了
那么安裝相同的步驟,完成其他幾個(gè)微服務(wù)的注冊
Nacos容器中安裝
為了使用的方便,我們將Nacos安裝到Docker容器中
首先我們需要拉取對應(yīng)的鏡像文件
docker pull nacos/nacos-server:1.4.2
通過鏡像文件運(yùn)行nacos容器
docker run -d --env MODE=standalone --name nacos -v /mydata/nacos/conf:/home/nacos/conf -p 8848:8848 nacos/nacos-server:1.4.2
安裝中如果出現(xiàn)了如下的提示
那么就把windows中的安裝文件中的conf目錄的文件上傳到虛擬機(jī)中,目前測試下來無論有沒有報(bào)錯(cuò)都最好把windows的conf下內(nèi)容上傳一下,不然可能nacos不能訪問
服務(wù)啟動時(shí)間比較長,耐心等待一會
啟動容器后,測試訪問:
http://192.168.56.100:8848/nacos 默認(rèn)的賬號密碼:nacos nacos
設(shè)置nacos服務(wù)自啟動
docker update --restart=always nacos
然后將眾多的微服務(wù)的注冊中心地址修改為docker容器中的注冊中心地址:
看到注冊信息就表示操作成功了
OpenFegin服務(wù)調(diào)用
OpenFegin是一個(gè)聲明式的服務(wù)調(diào)用組件。本質(zhì)上是封裝的Ribbon實(shí)現(xiàn)的。
商品服務(wù)定義接口
我們在商品服務(wù)中定義一個(gè)對外提供功能的接口
訂單服務(wù)中調(diào)用
我們在訂單服務(wù)中集成OpenFegin,完成對應(yīng)的商品服務(wù)調(diào)用
引入相關(guān)的依賴
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
然后創(chuàng)建對應(yīng)的Fegin接口
/*** @FeignClient 指明我們要從注冊中心中發(fā)現(xiàn)的服務(wù)的名稱*/
@FeignClient(name = "mall-product")
public interface ProductService {/*** 需要訪問的遠(yuǎn)程方法* @return*/@GetMapping("/product/brand/all")public R queryAllBrand();
}
還需要在啟動類中開啟遠(yuǎn)程調(diào)用
/*** basePackages 制定Fegin接口的路徑*/
@EnableFeignClients(basePackages = "com.msb.mall.order.fegin")
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.msb.mall.order.dao")
public class MallOrderApplication {public static void main(String[] args) {SpringApplication.run(MallOrderApplication.class, args);}}
然后在Order的控制期中完成商品服務(wù)的調(diào)用
@AutowiredProductService productService;@GetMapping("/products")public R queryProduct(){// OpenFegin 遠(yuǎn)程調(diào)用服務(wù)return R.ok().put("products",productService.queryAllBrand());}
啟動服務(wù)報(bào)錯(cuò)
然后就把相關(guān)的依賴添加上就可以了
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
如果請求的時(shí)候,發(fā)現(xiàn)還報(bào)錯(cuò)
在nacos的依賴中需要過濾netflix-ribbon
<exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion>
</exclusions>
通過@RefreshScope來動態(tài)的刷新配置數(shù)據(jù),注解的位置寫在Controller中
最后我們通過@Value(“#{}”) 來獲取配置中心中的數(shù)據(jù),配置中心的數(shù)據(jù)優(yōu)先于application.yml中的屬性信息
在對應(yīng)的命名空間下創(chuàng)建對應(yīng)的配置文件
默認(rèn)使用的public命名空間,如果要使用特定的命名空間的話,我們需要在bootstrap.properties中顯示的指定使用的命名空間
然后通過配置分組來區(qū)分不同的開發(fā)環(huán)境【開發(fā)環(huán)境dev,測試環(huán)境test,生產(chǎn)環(huán)境prod】
也就在具體的命名空間下我們創(chuàng)建的多個(gè)環(huán)境對應(yīng)的配置文件
Nacos配置中心
配置中心的基本使用
首先添加對應(yīng)的依賴,因?yàn)槠渌奈⒎?wù)也需要向配置中心中獲取配置信息,所以對應(yīng)的依賴我們添加在了commons模塊中
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency>
創(chuàng)建bootsrap.properties文件,這個(gè)文件會優(yōu)先于application.yml文件加載
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
在nacos服務(wù)中創(chuàng)建對應(yīng)的數(shù)據(jù)集,名稱是應(yīng)用名稱.properties ,mall-order.properties
命名空間和配置分組
我們在Nacos配置中心中是通過命名空間和配置分組來管理我們眾多的配置信息
首先我們通過命名空間來隔離服務(wù),給每一個(gè)服務(wù)創(chuàng)建一個(gè)對應(yīng)的命名空間
如果我們需要加載對應(yīng)的配置組中的信息,那么同樣的需要在bootstrap.properties中設(shè)置對應(yīng)的配置組信息
配置拆分
我們現(xiàn)在是將某個(gè)服務(wù)中的所有的配置都寫在了同一個(gè)配置文件中。為了方便管理,我們可以將配置信息拆分到配置中心中。
我們可以將配置文件中的數(shù)據(jù)源,mybatis的配置信息以及其他的信息拆分開來
然后在bootstrap.properties中的指定
```properties
spring.application.name=mall-order
spring.cloud.nacos.config.server-addr=192.168.56.100:8848
# 指定使用的命名空間
spring.cloud.nacos.config.namespace=638a5c2f-488f-4fa4-b7d3-1533d772e715
# 指定對應(yīng)的配置組
spring.cloud.nacos.config.group=prod# 配置多個(gè)配置集
spring.cloud.nacos.config.ext-config[0].data-id=mybats.yml
spring.cloud.nacos.config.ext-config[0].group=prod
spring.cloud.nacos.config.ext-config[0].refresh=falsespring.cloud.nacos.config.ext-config[1].data-id=datasourc.yml
spring.cloud.nacos.config.ext-config[1].group=prod
spring.cloud.nacos.config.ext-config[1].refresh=falsespring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=prod
spring.cloud.nacos.config.ext-config[2].refresh=false
網(wǎng)關(guān)Gateway
網(wǎng)關(guān)基本介紹
??在微服務(wù)架構(gòu)里,服務(wù)的粒度被進(jìn)一步細(xì)分,各個(gè)業(yè)務(wù)服務(wù)可以被獨(dú)立的設(shè)計(jì)、開發(fā)、測試、部署和管理。這時(shí),各個(gè)獨(dú)立部署單元可以用不同的開發(fā)測試團(tuán)隊(duì)維護(hù),可以使用不同的編程語言和技術(shù)平臺進(jìn)行設(shè)計(jì),這就要求必須使用一種語言和平臺無關(guān)的服務(wù)協(xié)議作為各個(gè)單元間的通訊方式。
??本系統(tǒng)中我們選擇的是Gateway作為我們的網(wǎng)關(guān)組件,Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),Spring Cloud Gateway旨在為微服務(wù)架構(gòu)提供一種簡單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態(tài)系中的網(wǎng)關(guān),目標(biāo)是替代ZUUL,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點(diǎn),和限流等。
??網(wǎng)關(guān)有幾個(gè)非常重要的概念:
- Route(路由):這是網(wǎng)關(guān)的基本構(gòu)建塊,它由一個(gè)ID,一個(gè)目標(biāo)URI,一組斷言和一組過濾器定義,如果斷言為真,則路由匹配
- Predicate(斷言):是Java8中提供的函數(shù)式接口,用來判斷是否路由匹配的
- Filter(過濾器):對斷言匹配的請求和響應(yīng)進(jìn)行修改處理
網(wǎng)關(guān)應(yīng)用
創(chuàng)建網(wǎng)關(guān)API服務(wù),修改SpringBoot和SpringCloud相關(guān)版本和其他的微服務(wù)保持一致。
然后添加對應(yīng)的依賴
<dependency><groupId>com.msb.mall</groupId><artifactId>mall-commons</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
因?yàn)榫W(wǎng)關(guān)服務(wù)路由的時(shí)候需要去注冊中心中發(fā)現(xiàn)相關(guān)的服務(wù)所以需要完成Nacos注冊中心的配置
# 注冊中心的配置
spring.application.name=mall-gateway
spring.cloud.nacos.discovery.server-addr=192.168.56.100:8848# 指定注冊中心的服務(wù)端口
server.port=8070
放開注解
同樣的網(wǎng)關(guān)中的相關(guān)配置我們也需要添加到Nacos的配置中心中,所以也需要整合Nacos配置中心
然后我們測試路由規(guī)則是否可行
spring:application:name: mall-gatewaycloud:nacos:discovery:server-addr: 192.168.56.100:8848gateway:routes: - id: route1uri: http://www.baidu.compredicates:- Query=url,baidu- id: route2uri: http://www.jd.compredicates: - Query=url,jd
啟動時(shí)候因?yàn)橐蕾嚨腸ommons服務(wù)中有MyBatis的依賴,那么在網(wǎng)關(guān)API服務(wù)中也需要數(shù)據(jù)源的相關(guān)配置,那么沒有就拋異常,這時(shí)我們可以在啟動類的SpringBootApplication注解中排除DataSourceAutoConfiguration的自動注入。
然后根據(jù)對應(yīng)的路由規(guī)則測試即可:
http://localhost:8070/?url=baidu
http://localhost:8070/?url=jd