gateway網(wǎng)關(guān)配合nacos做動態(tài)路由

通過gateway配合nacos做動態(tài)路由一共兩種方式琉历,第一種時(shí)通過json,解析json進(jìn)行動態(tài)路由,另一種通過設(shè)置properties文件進(jìn)行路由

一乾胶、通過解析json

gateway的動態(tài)路由可以配置在nacos的配置中心上,gateway啟動的時(shí)候來讀取配置朽寞,對各個(gè)請求進(jìn)行路由

配置文件如下所示

server:

port:9537

spring:

application:

name: cloud-alibaba-gateway

cloud:

nacos:

discovery:

server-addr: localhost:8848

config:

server-addr: localhost:8848

file-extension: json

group: DEFAULT_GROUP#nacos分組

? ? gateway:#路由

? ? ? discovery:

locator:

enabled:true? ? ? #開啟從注冊中心動態(tài)創(chuàng)建路由的功能识窿,利用微服務(wù)名進(jìn)行路由

management:

endpoints:

web:

exposure:

include: cloud-alibaba-gateway

1、新建配置類

package com.gateway.springcloud.config;

import com.alibaba.fastjson.JSONObject;

import com.alibaba.nacos.api.NacosFactory;

import com.alibaba.nacos.api.PropertyKeyConst;

import com.alibaba.nacos.api.config.ConfigService;

import com.alibaba.nacos.api.config.listener.Listener;

import com.alibaba.nacos.api.exception.NacosException;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.cloud.context.config.annotation.RefreshScope;

import org.springframework.cloud.gateway.event.RefreshRoutesEvent;

import org.springframework.cloud.gateway.route.RouteDefinition;

import org.springframework.cloud.gateway.route.RouteDefinitionWriter;

import org.springframework.context.ApplicationEventPublisher;

import org.springframework.context.ApplicationEventPublisherAware;

import org.springframework.context.annotation.Configuration;

import reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;

import java.util.ArrayList;

import java.util.List;

import java.util.Properties;

import java.util.concurrent.Executor;

/**

* 配置動態(tài)路由

*/

@Configuration

public class NacosDynamicRouteServiceimplements ApplicationEventPublisherAware {

private StringdataId ="cloud-alibaba-gateway";

? ? private Stringgroup ="DEFAULT_GROUP";

? ? @Value("${spring.cloud.nacos.config.server-addr}")

private StringserverAddr;

? ? @Autowired

? ? private RouteDefinitionWriterrouteDefinitionWriter;

? ? private ApplicationEventPublisherapplicationEventPublisher;

? ? private static final ListROUTE_LIST =new ArrayList<>();

? ? @PostConstruct

? ? public void dynamicRouteByNacosListener() {

try {

Properties properties =new Properties();

? ? ? ? ? ? properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);

? ? ? ? ? ? ConfigService configService = NacosFactory.createConfigService(properties);

? ? ? ? ? ? String config = configService.getConfig(dataId, group, 5000);

? ? ? ? ? ? configService.addListener(dataId, group, new Listener() {

@Override

? ? ? ? ? ? ? ? public void receiveConfigInfo(String configInfo) {

clearRoute();

? ? ? ? ? ? ? ? ? ? try {

List gatewayRouteDefinitions = JSONObject.parseArray(configInfo, RouteDefinition.class);

? ? ? ? ? ? ? ? ? ? ? ? for (RouteDefinition routeDefinition : gatewayRouteDefinitions) {

addRoute(routeDefinition);

? ? ? ? ? ? ? ? ? ? ? ? }

publish();

? ? ? ? ? ? ? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? ? ? ? ? ? ? }

}

@Override

? ? ? ? ? ? ? ? public ExecutorgetExecutor() {

return null;

? ? ? ? ? ? ? ? }

});

? ? ? ? }catch (NacosException e) {

e.printStackTrace();

? ? ? ? }

}

private void clearRoute() {

for(String id :ROUTE_LIST) {

this.routeDefinitionWriter.delete(Mono.just(id)).subscribe();

? ? ? ? }

ROUTE_LIST.clear();

? ? }

private void addRoute(RouteDefinition definition) {

try {

routeDefinitionWriter.save(Mono.just(definition)).subscribe();

? ? ? ? ? ? ROUTE_LIST.add(definition.getId());

? ? ? ? }catch (Exception e) {

e.printStackTrace();

? ? ? ? }

}

private void publish() {

this.applicationEventPublisher.publishEvent(new RefreshRoutesEvent(this.routeDefinitionWriter));

? ? }

@Override

? ? public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {

this.applicationEventPublisher = applicationEventPublisher;

? ? }

}

2、啟動gateway網(wǎng)關(guān)

這一步一定要在nacos添加配置之前甥温,因?yàn)榕渲妙愄砑拥谋O(jiān)聽如果nacos上的配置沒有進(jìn)行添加或者修改锻煌,網(wǎng)關(guān)是讀不到配置的,因?yàn)樗O(jiān)聽的是改變姻蚓。

3宋梧、nacos添加配置


里面的name參數(shù)狰挡,gateway已經(jīng)規(guī)定好了,不允許隨意修改加叁,值如下圖所示倦沧。

二、通過properties配置文件

本方式不需要建配置類它匕,原理就是通過配置中心直接把動態(tài)路由的配置讀到配置文件中,首先新建properties文件豫柬,

server.port=9547

spring.application.name=cloud-alibaba-gatewayaa

spring.cloud.nacos.discovery.server-addr=localhost:8848

spring.cloud.nacos.config.server-addr=localhost:8848

spring.cloud.nacos.config.file-extension=properties

spring.cloud.nacos.config.group=DEFAULT_GROUP

spring.cloud.gateway.discovery.locator.enabled=true

進(jìn)入nacos,新建配置

yml配置如下所示


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市创夜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驰吓,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姑廉,死亡現(xiàn)場離奇詭異翁涤,居然都是意外死亡桥言,警方通過查閱死者的電腦和手機(jī)葵礼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扔涧,“玉大人,你說我怎么就攤上這事枯夜。” “怎么了湖雹?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵摔吏,是天一觀的道長鸽嫂。 經(jīng)常有香客問我,道長舔腾,這世上最難降的妖魔是什么搂擦? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮扳还,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氨距。我一直安慰自己棘劣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布茬暇。 她就那樣靜靜地躺著,像睡著了一般勒奇。 火紅的嫁衣襯著肌膚如雪巧骚。 梳的紋絲不亂的頭發(fā)上赊颠,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天竣蹦,我揣著相機(jī)與錄音沧奴,去河邊找鬼草添。 笑死扼仲,一個(gè)胖子當(dāng)著我的面吹牛抄淑,可吹牛的內(nèi)容都是我干的驰后。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼郑原,長吁一口氣:“原來是場噩夢啊……” “哼夜涕!你這毒婦竟也來了犯犁?” 一聲冷哼從身側(cè)響起女器,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤驾胆,失蹤者是張志新(化名)和其女友劉穎涣澡,沒想到半個(gè)月后丧诺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抗愁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年呵晚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劣纲。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡癞季,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绷柒,到底是詐尸還是另有隱情,我是刑警寧澤废睦,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站奈应,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杖挣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一株汉、第九天 我趴在偏房一處隱蔽的房頂上張望歌殃。 院中可真熱鬧乔妈,春花似錦氓皱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躲因,卻和暖如春忌傻,著一層夾襖步出監(jiān)牢的瞬間大脉,已是汗流浹背水孩。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秤标,地道東北人宙刘。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像悬包,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容