踩坑-springcloud統(tǒng)一配置中心+bus-amqp+git自動刷新

Tips:
springcloud版本:Finchley.RELEASE
springboot版本:2.0.8.RELEASE
jdk:1.8
rabbitmq : 用默認用戶guest

當你看到這篇時卧惜,你可能看了好多篇關(guān)于配置刷新的文章打月,但是都不能解決你的問題,要么版本不一致发框,配置出問題,mq有問題等等钞瀑,放輕松又沾,慢慢往下看,然后就很舒服跳芳。折騰了一天的坑,踩過了大大小小的坑竹勉,終于把config利用bus-amqp基于webhook的自動刷新給解決了飞盆。
首先,快速搭建一套eureka server、eureka client 吓歇、config-server 孽水,@EnableDiscoveryClient在F版本可以省略了,三步走依賴城看、注解女气、配置。

一测柠、 搭建項目

  • 我最簡化了配置文件炼鞠,能不寫的就不寫,以防我們在剛學(xué)的時候擔(dān)心這個配置一定要寫嗎轰胁?不寫有什么影響呢谒主?各種疑慮影響游戲體驗。有興趣的可以自己研究cloud里面的配置赃阀。在父工程里添加版本號霎肯,公共模塊spring-boot-starter-web,spring-boot-starter-actuator,依賴太長就不貼了。代碼鏈接在下面榛斯,就為了讓你先看一眼配置观游。
    1. eureka server
      依賴:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

注解:@SpringBootApplication @EnableEurekaServer
配置:

### 注意 文件名為application.yml
spring:
  application:
    name: eureka-server
server:
  port: 8761
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
    fetch-registry: false
    register-with-eureka: false
    1. eureka client
      依賴:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

注解:@SpringBootApplication
配置:

### 注意 文件名為 bootstrap.yml
server:
  port: 8082
spring:
  application:
    name: comsumer 
  cloud:
    config:
      profile: dev      # profile對應(yīng)config server所獲取的配置文件中的{profile}
      label: master     # 指定Git倉庫的分支,對應(yīng)config server所獲取的配置文件的{label}
      discovery:
        enabled: true
        service-id: config-server ##配置中心服務(wù)名
      name: eureka-client  ##倉庫中對應(yīng)配置的名子
  rabbitmq:
    host: 192.168.246.134 ##我虛擬機地址
    1. config server
      依賴:
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

注解:@SpringBootApplication,@EnableConfigServer
配置:

### 注意 文件名為application.yml
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          # Git倉庫地址 請寫自己的
          uri: https://github.com/Guiee/spring-cloud-config-repo.git
  rabbitmq:
    host: 192.168.246.134
eureka:
  instance:
    prefer-ip-address: true
management:
  endpoints:
    web:
      exposure:
        include: "*"

不想自己寫可以直接clone下來驮俗,看看結(jié)果懂缕,項目代碼:https://github.com/Guiee/springcloud-config

二、 安裝rabbitmq

這個網(wǎng)上搜一搜就ok了意述,注意的是如果mq安裝在虛擬機里,本地主機是無法用guest用戶登錄的吮蛹。

  • 到這 荤崇,git倉庫你總得有吧,不想建就fork一下我的潮针,省事兒懶人鏈接

三术荤、依次啟動 eureka server(8761)、config server(8080)每篷、eureka client(8082)

  • 然后啟動項目看一看有沒有啥問題
  • 訪問http://localhost:8082/env
  • 修改github中的env的值瓣戚,發(fā)送 post 請求 http://localhost:8080/actuator/bus-refresh,可以使用psotman 或者在終端 curl -X POST http://localhost:8080/actuator/bus-refresh
    postman
  • 在訪問http://localhost:8082/env 看下值是否刷新了
  • 這時候可以看下idea里控制臺的輸出焦读,也可以看下rabbit的消息是否被消費了子库,如下折線。


    rabbitmq頁面截圖.jpg

四矗晃、 webhook自動刷新

在config-server中把bus-refresh端點暴露出來,默認actuator只暴露 info health我就全暴了仑嗅。這里省略建倉庫那些的。

management:
  endpoints:
    web:
      exposure:
        include: "*"

可能很多人用 Finchley.RELEASE這個版本向config server 發(fā)送 post http://localhost:8080/actuator/bus-refresh都能成功,但是一用webhook就不能成功仓技,要么404,405要么就報亂七八槽的錯鸵贬,還有config-server刷新了,客戶端沒有刷新脖捻±疲坑只有自己踩過,才知道是真的坑地沮,哈哈嗜浮。

  • 利用natapp小工具,實現(xiàn)內(nèi)網(wǎng)穿透诉濒,把下面這個網(wǎng)址拷到webhook的Payload URL里周伦,例 如 http://werv67.natappfree.cc/refresh劃重點 至于這里為什么寫的是/refresh,而不是/actuator/bus-refresh或者/monitor,因為這里就是坑未荒,具體往下看专挪。
    natapp運行.png

    這里先把項目啟動起來,然后再添加webhook片排,如果你能看到下面那個綠色小箭頭就基本成功了寨腔。
    image.png

    把env的值修改一下,然后去eureka client中訪問一下率寡,我的地址是http://localhost:8082/env,如果值刷新了迫卢,就ok了。
    image.png

    四冶共、 坑點
    上面說的那個url的事情乾蛤, 主要是github那個Payload URL回調(diào)需要返回值,用 http://xxx/monitor , 還是 http://xxx/bus/refresh都不管用捅僵。所以我在config-server里加了一個controller家卖,用來轉(zhuǎn)發(fā),只用把yml里config-server服務(wù)名設(shè)置一下spring.application.name=xxx,其他的都不用修改,或者你想換個url來轉(zhuǎn)發(fā)都可以庙楚,看你心情上荡。
@RestController
public class ConfigController {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @Autowired
    private RestTemplate restTemplate;

    @Value("${spring.application.name}")
    private String serviceId;

    @PostMapping("/refresh")
    public Object sync() {
        Map<String, Integer> map = new HashMap<String, Integer>();
        ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);
        System.out.println(serviceId);
        String url = String.format("http://%s:%s/actuator/bus-refresh", serviceInstance.getHost(), serviceInstance.getPort());
        System.out.println(url);
        restTemplate.postForObject(url, map, Object.class);
        map.put("code", 0);
        return map;
    }
}

寫的可能很粗糙,很多地方?jīng)]寫清楚馒闷,但這是真真實實動態(tài)刷新了酪捡,沒明白的可以簡信我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纳账,一起剝皮案震驚了整個濱河市逛薇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疏虫,老刑警劉巖金刁,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帅涂,死亡現(xiàn)場離奇詭異,居然都是意外死亡尤蛮,警方通過查閱死者的電腦和手機媳友,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來产捞,“玉大人醇锚,你說我怎么就攤上這事∨髁伲” “怎么了焊唬?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長看靠。 經(jīng)常有香客問我赶促,道長,這世上最難降的妖魔是什么挟炬? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任鸥滨,我火速辦了婚禮,結(jié)果婚禮上谤祖,老公的妹妹穿的比我還像新娘婿滓。我一直安慰自己,他們只是感情好粥喜,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布凸主。 她就那樣靜靜地躺著,像睡著了一般额湘。 火紅的嫁衣襯著肌膚如雪卿吐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天锋华,我揣著相機與錄音嗡官,去河邊找鬼。 笑死供置,一個胖子當著我的面吹牛谨湘,可吹牛的內(nèi)容都是我干的绽快。 我是一名探鬼主播芥丧,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坊罢!你這毒婦竟也來了续担?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤活孩,失蹤者是張志新(化名)和其女友劉穎物遇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡询兴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年乃沙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗舰。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡警儒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眶根,到底是詐尸還是另有隱情蜀铲,我是刑警寧澤宣渗,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布仆抵,位于F島的核電站格遭,受9級特大地震影響墓臭,放射性物質(zhì)發(fā)生泄漏弦悉。R本人自食惡果不足惜匿情,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一击奶、第九天 我趴在偏房一處隱蔽的房頂上張望匹耕。 院中可真熱鬧别伏,春花似錦蹄衷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至类茂,卻和暖如春耍属,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巩检。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工厚骗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兢哭。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓领舰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迟螺。 傳聞我的和親對象是個殘疾皇子冲秽,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

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