日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
服務配置:實現(xiàn)動態(tài)刷新與配置共享

基于阿里開源的Sentinel實現(xiàn)了服務的限流與容錯,并詳細介紹了Sentinel的核心技術與配置規(guī)則。簡單介紹了服務網(wǎng)關,并對SpringCloud Gateway的核心架構進行了簡要說明,也在項目中整合了SpringCloud Gateway網(wǎng)關實現(xiàn)了通過網(wǎng)關訪問后端微服務。

創(chuàng)新互聯(lián)服務項目包括珠暉網(wǎng)站建設、珠暉網(wǎng)站制作、珠暉網(wǎng)頁制作以及珠暉網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,珠暉網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到珠暉省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

同時,也基于SpringCloud Gateway整合Sentinel實現(xiàn)了網(wǎng)關的限流功能,詳細介紹了SpringCloud Gateway網(wǎng)關的核心技術。在鏈路追蹤章節(jié),我們開始簡單介紹了分布式鏈路追蹤技術與解決方案,隨后在項目中整合Sleuth實現(xiàn)了鏈路追蹤,并使用Sleuth整合ZipKin實現(xiàn)了分布式鏈路追蹤的可視化 。

在消息服務章節(jié),我們介紹了MQ的使用場景,引入MQ后的注意事項以及MQ的選型對比,在項目中整合了RocketMQ,并給大家介紹了RocketMQ的核心技術。

在服務配置章節(jié),我們首先介紹了服務配置與Nacos作為配置中心的相關概念,并在項目中整合了Nacos配置中心。接下來,就基于Nacos實現(xiàn)動態(tài)刷新與配置共享。

本章總覽?

注意:本章中在測試每個案例時,都需要啟動Nacos,Sentinel,ZipKin和RocketMQ。?

細心的小伙伴可能已經(jīng)發(fā)現(xiàn)了,之前我們將微服務的配置放入了Nacos,但是此時如果在Nacos中修改了配置,程序是無法讀取到修改后的配置的。所以,我們需要實現(xiàn)動態(tài)刷新的功能。

「注意:為了描述上的簡便,這里,我們就以用戶微服務舉例說明,其他微服務的實現(xiàn)方式都是一樣的?!?/p>

修改Nacos配置

在Nacos中修改server-user-dev.yaml的配置,在server-user-dev.yaml配置中新增如下內(nèi)容。

author:
name: binghe

如下所示。

點擊發(fā)布后會彈出如下提示。

直接點擊確認發(fā)布即可。

通過IOC容器獲取Nacos配置

(1)在用戶微服務shop-user的io.binghe.shop.user.controller包下新建NacosController類,并在NacosController類中注入org.springframework.context.ConfigurableApplicationContext類,通過ConfigurableApplicationContext獲取到系統(tǒng)環(huán)境變量,并從環(huán)境變量中獲取到author.name屬性的值,就是我們在Nacos中配置的作者姓名,如下所示。

/**
* @author binghe
* @version 1.0.0
* @description 從Nacos中獲取配置項
*/
@Slf4j
@RestController
public class NacosController {

@Autowired
private ConfigurableApplicationContext context;

@GetMapping("/nacos/test")
public String nacosTest(){
String authorName = context.getEnvironment().getProperty("author.name");
log.info("獲取到的作者姓名為:{}", authorName);
return authorName;
}
}

(2)啟動用戶微服務和網(wǎng)關服務,并在瀏覽器中輸入http://localhost:10001/server-user/user/nacos/test,如下所示。

可以看到,能夠正確讀取到Nacos中的配置信息。

(3)修改Nacos中server-user-dev.yaml的配置,將author.name的值修改為binghe001,如下所示。

點擊發(fā)布。

(4)發(fā)布后,不要重啟用戶微服務和網(wǎng)關服務,在瀏覽器上刷新http://localhost:10001/server-user/user/nacos/test鏈接,發(fā)現(xiàn)讀取到的信息已經(jīng)變成了binghe001,如下所示。

可以看到,通過IOC容器能夠讀取到Nacos中修改后的配置。

通過注解獲取Nacos配置

(1)在用戶微服務shop-user的io.binghe.shop.user.controller.NacosController類上添加@RefreshScope注解,并將Nacos中的author.name的值注入到NacosController類中,并通過接口獲取到注入的Nacos中的author.name值,如下所示。

/**
* @author binghe
* @version 1.0.0
* @description 從Nacos中獲取配置項
*/
@Slf4j
@RefreshScope
@RestController
public class NacosController {

@Autowired
private ConfigurableApplicationContext context;

@Value("${author.name}")
private String nacosAuthorName;

@GetMapping("/nacos/test")
public String nacosTest(){
String authorName = context.getEnvironment().getProperty("author.name");
log.info("獲取到的作者姓名為:{}", authorName);
return authorName;
}

@GetMapping("/nacos/name")
public String nacosName(){
log.info("從Nacos中獲取到的作者的姓名為:{}", nacosAuthorName);
return nacosAuthorName;
}
}

(2)啟動用戶微服務和網(wǎng)關服務,并在瀏覽器中輸入http://localhost:10001/server-user/user/nacos/name,如下所示。

(3)修改Nacos中server-user-dev.yaml的配置,將author.name的值修改為binghe002,如下所示。

(4)發(fā)布后,不要重啟用戶微服務和網(wǎng)關服務,在瀏覽器上刷新http://localhost:10001/server-user/user/nacos/name鏈接,發(fā)現(xiàn)讀取到的信息已經(jīng)變成了binghe002,如下所示。

說明使用注解的方式也能夠讀取到Nacos中更新后的配置信息。

注意:雖然通過IOC容器和注解都能夠讀取到Nacos中更新后的配置信息,但是在實際項目中,推薦使用注解的方式獲取Nacos中更新后的配置信息。

實現(xiàn)配置共享?

一般情況下,開發(fā)項目的過程中會包含:開發(fā)環(huán)境、測試環(huán)境、預發(fā)布環(huán)境和生成環(huán)境,每個環(huán)境中的配置大部分是相同的,有少部分配置不同,如果我們能夠?qū)⒋蟛糠窒嗤呐渲贸槿〕鰜恚屚粋€微服務在不同的環(huán)境中共享,則能夠大大降低我們的維護成本。

另外,如果使用的是相同的技術棧的話,對于每個微服務來說,可能大部分的配置也是相同的,如果我們將這些相同的配置抽取出來讓各個微服務共享,則能夠進一步降低維護成本。

所以,實現(xiàn)配置共享可以從 「單服務多環(huán)境配置和多服務配置」 兩個角度來思考。

單服務多環(huán)境實現(xiàn)共享

實現(xiàn)單個微服務在多個不同環(huán)境中的配置共享比較簡單,只要在Nacos中配置一個以spring.application.name為Data ID的配置文件,并且將這個微服務在所有環(huán)境中公共的配置放進去即可。

「注意:這里我們以用戶微服務為例進行實現(xiàn)。」

(1)在Nacos中新建一個以server-user.yaml為Data ID的配置,并且將用戶微服務在各個環(huán)境中共有的配置復制進去,如下所示。

其中,我們假設用戶微服務在多個環(huán)境下公共的配置如下所示。

server:
port: 8060
servlet:
context-path: /user
spring:
application:
name: server-user
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: root
platform: mysql
type: com.alibaba.druid.pool.DruidDataSource
# 下面為連接池的補充設置,應用到上面所有數(shù)據(jù)源中
# 初始化大小,最小,最大
initialSize: 10
minIdle: 5
maxActive: 20
# 配置獲取連接等待超時的時間
maxWait: 60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
timeBetweenEvictionRunsMillis: 3600000
# 配置一個連接在池中最小生存的時間,單位是毫秒
minEvictableIdleTimeMillis: 3600000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打開PSCache,并且指定每個連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
maxOpenPreparedStatements: 20
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
filters: stat
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
http:
encoding:
enabled: true
charset: UTF-8
force: true
mybatis-plus:
global-config:
db-config:
id-type: auto
field-strategy: not-empty
table-underline: true
db-type: oracle
logic-delete-value: 1
logic-not-delete-value: 0
mapper-locations: classpath:/mapper/*.xml
configuration:
jdbc-type-for-null: 'null'


rocketmq:
name-server: 127.0.0.1:9876

點擊發(fā)布。

(2)將Nacos中用戶微服務在開發(fā)環(huán)境下的配置server-user-dev.yaml修改成如下所示。

author:
name: binghe_dev

如下所示。

點擊發(fā)布。

(3)在Nacos中添加用戶微服務在測試環(huán)境下的配置server-user-test.yaml,配置中的主要內(nèi)容如下所示。

author:
name: binghe_test

具體如下所示。

點擊發(fā)布。

(4)此時Nacos中的配置如下所示。

(5)查看用戶微服務中bootstrap.yml文件的配置,如下所示。

spring:
application:
name: server-user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: user_group
profiles:
active: dev

可以看到,此時bootstrap.yml文件中配置的是環(huán)境是dev,表示開發(fā)環(huán)境。

(6)啟動用戶微服務和網(wǎng)關服務,在瀏覽器中輸入http://localhost:10001/server-user/user/nacos/name,如下所示。

可以看到,正確獲取到了Nacos中server-user-dev.yaml配置中的author.name的值。

(7)將用戶微服務的bootstrap.yml文件中的環(huán)境變量修改成test,如下所示。

spring:
profiles:
active: test

(8)重啟用戶微服務,在瀏覽器中輸入http://localhost:10001/server-user/user/nacos/name,如下所示。

可以看到,正確獲取到了Nacos中server-user-test.yaml配置中的author.name的值。

綜上:我們正確實現(xiàn)了單個微服務在多個不同環(huán)境下的公共配置的共享操作。

多服務配置實現(xiàn)共享

不同的微服務之間實現(xiàn)公共的配置共享也比較簡單,在Nacos中定義一個公共配置,然后在當前的配置中引入即可。具體的實現(xiàn)步驟如下所示。

(1)在Nacos中新建一個以server-all.yaml為Data ID的配置,配置中的主要內(nèi)容為用戶微服務、商品微服務和訂單微服務共有的配置,如下所示。

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: root
platform: mysql
type: com.alibaba.druid.pool.DruidDataSource
# 下面為連接池的補充設置,應用到上面所有數(shù)據(jù)源中
# 初始化大小,最小,最大
initialSize: 10
minIdle: 5
maxActive: 20
# 配置獲取連接等待超時的時間
maxWait: 60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
timeBetweenEvictionRunsMillis: 3600000
# 配置一個連接在池中最小生存的時間,單位是毫秒
minEvictableIdleTimeMillis: 3600000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打開PSCache,并且指定每個連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
maxOpenPreparedStatements: 20
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
filters: stat
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
http:
encoding:
enabled: true
charset: UTF-8
force: true
mybatis-plus:
global-config:
db-config:
id-type: auto
field-strategy: not-empty
table-underline: true
db-type: oracle
logic-delete-value: 1
logic-not-delete-value: 0
mapper-locations: classpath:/mapper/*.xml
configuration:
jdbc-type-for-null: 'null'

具體配置如下所示。

點擊發(fā)布,接下來就是在Nacos中修改各個微服務的配置,將各個微服務的配置中公共的配置刪除。

(2)在Nacos中修改server-user.yaml的配置,修改后的配置如下所示。

server:
port: 8060
servlet:
context-path: /user
spring:
application:
name: server-user
rocketmq:
name-server: 127.0.0.1:9876

具體如下所示。

點擊發(fā)布。

(3)在Nacos中修改server-product-dev.yaml的配置,修改后的配置如下所示。

server:
port: 8070
servlet:
context-path: /product
spring:
application:
name: server-product

具體如下所示。

點擊發(fā)布。

(4)在Nacos中修改server-order-dev.yaml的配置,修改后的配置如下所示。

server:
port: 8080
tomcat:
max-threads: 20
servlet:
context-path: /order
spring:
application:
name: server-order
cloud:
sentinel:
transport:
port: 9999
dashboard: 127.0.0.1:8888
web-context-unify: false
feign:
sentinel:
enabled: true
rocketmq:
name-server: 127.0.0.1:9876
producer:
group: order-group

具體如下所示。

點擊發(fā)布。

(5)修改用戶微服務shop-user中的bootstrap.yml文件,修改后的配置如下所示。

spring:
application:
name: server-user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: user_group
shared-configs[0]:
data_id: server-all.yaml
group: all_group
refresh: true

profiles:
active: dev

(6)修改商品微服務shop-product中的bootstrap.yml文件,修改后的配置如下所示。

spring:
application:
name: server-product
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: product_group
shared-configs[0]:
data_id: server-all.yaml
group: all_group
refresh: true
profiles:
active: dev

(7)修改訂單微服務shop-order中的bootstrap.yml文件,修改后的配置如下所示。

spring:
application:
name: server-order
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
group: order_group
shared-configs[0]:
data_id: server-all.yaml
group: all_group
refresh: true
profiles:
active: dev

(8)分別啟動用戶微服務,商品微服務,訂單微服務和服務網(wǎng)關,在瀏覽器中輸入localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1,如下所示。

可以看到,瀏覽器中正確輸出了結(jié)果信息。

查看各個微服務中也會打印出相關的日志,如下所示。

  • 用戶微服務會打印出如下信息
獲取到的用戶信息為:{"address":"北京","id":1001,"password":"c26be8aaf53b15054896983b43eb6a65","phone":"13212345678","username":"binghe"}
用戶微服務收到了訂單信息:{"address":"北京","id":15235872727371776,"phone":"13212345678","totalPrice":2399.00,"userId":1001,"username":"binghe"}
  • 商品微服務會打印出如下信息
獲取到的商品信息為:{"id":1001,"proName":"華為","proPrice":2399.00,"proStock":9999}
更新商品庫存?zhèn)鬟f的參數(shù)為: 商品id:1001, 購買數(shù)量:1
  • 訂單微服務會打印出如下信息
提交訂單時傳遞的參數(shù):{"count":1,"empty":false,"productId":1001,"userId":1001}
庫存扣減成功
  • 網(wǎng)關服務會打印出如下信息
執(zhí)行前置過濾器邏輯
執(zhí)行后置過濾器邏輯
訪問接口主機: localhost
訪問接口端口: 10001
訪問接口URL: /server-order/order/submit_order
訪問接口URL參數(shù): userId=1001&productId=1001&count=1
訪問接口時長: 863ms

說明我們的項目中成功整合了Nacos的配置中心,并實現(xiàn)了配置的動態(tài)刷新和共享。


網(wǎng)頁標題:服務配置:實現(xiàn)動態(tài)刷新與配置共享
URL鏈接:http://m.5511xx.com/article/ccdspec.html