spring boot config 集成rabbitmq實現總線bus實時刷新配置


git地址:
https://github.com/a18792721831/studySpringCloud.git

1. rabbitmq安裝

1.1 選擇docker 鏡像

因爲使用docker 進行啓動rabbitmq,那麼一個合適的鏡像是我們的基礎,如果選擇的鏡像不合適,那麼就相當於大樓的地基錯誤。
在這裏插入圖片描述
在這裏插入圖片描述
看到這個是不是很興奮,so easy!
但是千萬不要用這個鏡像,我們繼續往下翻。
在這裏插入圖片描述
發現如果要使用rabbitmq的管理界面,那麼需要使用集成了插件的鏡像,而不是latest的鏡像。
這個就比較坑,否則無法訪問界面。

1.2 k8s 命名空間創建

rabbitmq-namespace.yaml

apiVersion : v1
kind : Namespace
metadata : 
  name : rabbitmq
  labels : 
    app : rabbitmq

執行kubectl apply -f rabbitmq-namespace.yaml
驗證
在這裏插入圖片描述

1.3 k8s 服務創建

創建k8s服務主要是統一對外開放,但是本次只是各個獨立的rabbitmq,未統一化集羣部署。
所以這部可有可無。
但是統一了服務,後續對rabbitmq集羣化後,使用到rabbitmq的地方是不需要做任何修改的。
開放端口,需要開放兩個端口(其餘的我未開放)
5762:消費者,生產者的端口
15762:管理界面的端口。
注意,這裏說的是rabbitmq默認的端口,也就是容器內的端口(可以自定義配置)
因爲我們主要是學習,測試的rabbitmq,所以未做目錄的掛載,意味着,當容器或者說pod重新啓動或者調度後,rabbitmq所有的信息將會丟失(主要就是裏面的路由和消息)
rabbitmq-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-service-node
  namespace: rabbitmq
  labels:
    name: rabbitmq-service
spec: 
  selector:
    rabbitmq: template
  type: NodePort
  ports:
  - name: rabbitmq-service-15672
    protocol: TCP
    port: 15672
    targetPort: 15672
    nodePort: 31672
  - name: rabbitmq-service-5672
    protocol: TCP
    port: 5672
    targetPort: 5672
    nodePort: 30672

端口映射關係:

容器內 node 對外
5672 5672 30672
15672 15672 31672

1.4 k8s daemonset 的 deployment

因爲k8s集羣只有兩個節點(窮),所以採集deamonset就行,保證node節點必須有一個。
rabbitmq-daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: rabbitmq-deployment-daemonset
  namespace: rabbitmq
  labels:
    rabbitmq: deployment-daemonset
spec:
  #replicas: 2
  selector:
    matchLabels:
      rabbitmq: template
  #strategy: 
  updateStrategy:
    rollingUpdate:
      #maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        rabbitmq: template
    spec:
      #hostNetwork: true
      containers:
      - name: rabbitmq-pod
        image: rabbitmq:3-management
        imagePullPolicy: IfNotPresent
        livenessProbe:
          tcpSocket:
            port: 5672
          initialDelaySeconds: 180
          timeoutSeconds: 30
          periodSeconds: 600
        resources:
          limits:
            cpu: 4000m
            memory: 4096Mi
          requests:
            cpu: 1000m
            memory: 2048Mi
        ports:
        - name: rabbitmq-15672
          containerPort: 15672
          hostPort: 15672
          protocol: TCP
        - name: rabbitmq-5672
          containerPort: 5672
          hostPort: 5672
          protocol: TCP

執行kubectl apply -f rabbitmq-daemonset.yaml
等待k8s調度,然後在節點上pull鏡像。
可能需要鏡像加速。
pull完後,就會啓動。

1.5 驗證

在這裏插入圖片描述
這個名字就是啓動的pod的名字
在這裏插入圖片描述

2. spring boot config bus server 集成

2.1 創建項目

在這裏插入圖片描述

2.2 配置

application.yml

server:
  port: 8011

logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  application:
    name: config-eureka-server
#  profiles:
#    active: native
#  cloud:
#    config:
#      server:
#        native:
#          search-locations: classpath:/portconfig/
  profiles:
    active: git
  cloud:
    config:
      server:
        git:
          uri: https://github.com/a18792721831/studySpringCloud # 倉庫跟地址
          search-paths: springbootconfigserver/src/main/resources/portconfig # 以studySpringCloud爲根路徑進行搜索的文件夾地址
          username: a18792721831 # 用戶名
          password: # 公有倉庫可以不寫密碼
          timeout: 60
      label: master # 指定分支
  rabbitmq:
    host: 10.0.228.93
    port: 30672
    username: guest
    password: guest
eureka:
  client:
#    register-with-eureka: false
#    fetch-registry: false
  service-url:
    defaultZone: http://127.0.0.1:8761/eureka/
management:
  security:
    enabled: false
  endpoints:
    web:
      exposure:
        include: '*'

這裏有個坑:
management.endpoints.web.exposure.include必須配置,可以配置其他字符。
management.security.enabled=false表示rabbitmq訪問時,不進行安全驗證。

2.3 註解

在這裏插入圖片描述

2.4 遠程配置

遠程配置需要註釋掉port配置,因爲我們需要多實例啓動。
在這裏插入圖片描述

2.5 啓動

在這裏插入圖片描述
在這裏插入圖片描述

2.6 驗證實時刷新

當springbootconfigbusserver啓動後,使用postMan發送請求;
在這裏插入圖片描述
這裏有個坑,好多書本上資料上寫的是http://[ip]:[port]/bus/refresh
且是發送給client。
可能是舊版本支持吧。
或者舊版本資料上說請求http://[ip]:[port]/bus-refresh
新版本請求是http://[ip]:[port]/actuator/bus-refresh
在這裏插入圖片描述
日誌如下
在這裏插入圖片描述
這是遠程沒有修改時刷新的日誌。
接下來我們遠程修改後,在次刷新。
在這裏插入圖片描述
刷新
在這裏插入圖片描述
有了,更新了一個文件。

2. spring boot config bus client 集成

2.1 創建項目

在這裏插入圖片描述

2.2 配置

在這裏插入圖片描述
這個配置文件是springbootconfigeurekaclient中拷貝即可。
在這裏插入圖片描述
management.security.enabled=false表示rabbitmq訪問時,不進行安全驗證。

2.4 啓動

在這裏插入圖片描述

2.5 修改遠程配置

在這裏插入圖片描述

2.6 post 刷新觸發

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
config client從config server得到了配置。
而且實現了實時刷新,未重啓服務,但是配置信息已經發生修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章