日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Docker下的disconf實戰全文鏈接

  1. https://blog.csdn.net/boling_cavalry/article/details/71082610;
  2. https://blog.csdn.net/boling_cavalry/article/details/71107498;
  3. https://blog.csdn.net/boling_cavalry/article/details/71120725;
  4. https://blog.csdn.net/boling_cavalry/article/details/71404395;
  5. https://blog.csdn.net/boling_cavalry/article/details/71424124;

細說demo開發

在上一章http://blog.csdn.net/boling_cavalry/article/details/71404395中我們體驗了disconf服務的使用方獲取配置以及實時感知到這個配置變化的效果,今天我們一起來實踐這個demo的開發過程,學會在項目中使用disconf服務。

此demo源于disconf官網的demo(git地址:git@github.com:knightliao/disconf-demos-JAVA.git,下有三個工程,此文的demo源自其中的disconf-standalone-demo),官方demo展示了大而全的功能,做為初學者的我花了不少時間去看,因此我就基于官方代碼做了精簡,精簡后的代碼旨在快速為初學者展示最基本的遠程配置和實時感知配置變化的能力,若要系統的學習disconf的各類服務,還請自行研究官方文檔和demo。

本文demo的源碼在git@github.com:zq2599/blog_demos.git,下載后的里面有多個工程,下圖紅框中的工程才是本文的demo:

Docker下使用disconf:細說demo開發

接下來我們看看調用disconf服務需要哪些步驟:

  1. 由于這是個maven工程,所以首先要確定依賴包,我們用到的主要有disconf的庫,以及spring和日志等常用庫,如下:

<dependencies>

<dependency>

<groupId>com.baidu.disconf</groupId>

<artifactId>disconf-client</artifactId>

<version>2.6.36</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>1.4</version>

</dependency>

<dependency>

<groupId>commons-lang</groupId>

<artifactId>commons-lang</artifactId>

<version>2.4</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>1.7.6</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-core</artifactId>

<version>1.0.9</version>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>1.0.9</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>4.1.7.RELEASE</version>

</dependency>

</dependencies>

maven的構建插件是作者自定義的,除了基本功能,還生成了一些腳本工具,我們直接使用:

<plugin>

<groupId>com.github.knightliao.plugin</groupId>

<artifactId>starter-shade-maven-plugin</artifactId>

<version>1.0.0</version>

<executions>

<execution>

<phase>package</phase>

<goals>

<goal>shade</goal>

</goals>

<configuration>

<finalName>${project.build.finalName}</finalName>

<transformers>

<transformer

implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">

<mainClass>com.example.disconf.demo.DisconfDemoMain</mainClass>

</transformer>

<transformer

implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">

<resources>

<resource>env</resource>

<resource>disconf.properties</resource>

<resource>logback.xml</resource>

</resources>

</transformer>

<transformer

implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">

<resource>META-INF/spring.handlers</resource>

</transformer>

<transformer

implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">

<resource>META-INF/spring.schemas</resource>

</transformer>

</transformers>

</configuration>

</execution>

</executions>

</plugin>

  1. 程序入口是DisconfDemoMain類,里面的main方法初始化spring環境,啟動一個while死循環,每隔五秒將JedisConfig實例的host和port屬性打印到終端;
  2. JedisConfig的host和port屬性,是被disconf的runtime環境控制,可以實時被設置成最新的配置值,對應的遠程配置和具體的屬性字段,都是通過注解來完成的:
Docker下使用disconf:細說demo開發

如上圖所示:

紅框中的DisconfFile注解將該類和disconf服務端的redis.properties配置綁定;

黃框中的DisconfFileItem注解將host和port屬性與redis.properties配置的host,port屬性綁定;

紫框中的DisconfUpdateService注解向disconf運行時注冊了配置變化的實時廣播監聽,當配置發生變化時,藍框中的reload方法會被disconf運行時調用;

  1. SimpleRedisServiceUpdateCallback類的作用也是注冊廣播監聽,當配置發生變化時,藍框中的reload方法會被disconf運行時調用;
  2. 除了代碼,還要關注disconf.properties文件:

# 是否使用遠程配置文件

# true(默認)會從遠程獲取配置 false則直接獲取本地配置

disconf.enable.remote.conf=true

#

# 配置服務器的 HOST,用逗號分隔 127.0.0.1:8004,127.0.0.1:8004

#

disconf.conf_server_host=Nginxhost:80

#disconf.conf_server_host=127.0.0.1:80

# 版本, 請采用 X_X_X_X 格式

disconf.version=1_0_0_0

# APP 請采用 產品線_服務名 格式

disconf.app=disconf_demo

# 環境disco

disconf.env=rd

# 忽略哪些分布式配置,用逗號分隔

disconf.ignore=

# 獲取遠程配置 重試次數,默認是3次

disconf.conf_server_url_retry_times=1

# 獲取遠程配置 重試時休眠時間,默認是5秒

disconf.conf_server_url_retry_sleep_seconds=1

# 用戶指定的下載文件夾, 遠程文件下載后會放在這里

disconf.user_define_download_dir=./disconf/download2

# 下載的文件會被遷移到classpath根路徑下,強烈建議將此選項置為 true(默認是true)

disconf.enable_local_download_dir_in_class_path=true

confserverhost的值在此處配置成nginxhost,這個和docker容器啟動時配置的nginx的link別名一致,這樣demo就能訪問到disconf服務器了;

  1. disconf在demo上的運行時環境,是通過spring配置來實現的,如下:

<context:component-scan base-package="com.example"/>

<aop:aspectj-autoproxy proxy-target-class="true"/>

<!-- 使用disconf必須添加以下配置 -->

<bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean"

destroy-method="destroy">

<property name="scanPackage" value="com.example.disconf.demo"/>

</bean>

<bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond"

init-method="init" destroy-method="destroy">

</bean>

disconfMgrBean復制核心管理,disconfMgrBean2負責啟動定時掃描和實現銷毀時的回調。

  1. 配置好這些,打開控制臺,在pom.xml文件所在目錄下執行,即可完成打包,這時候進入target目錄,可以看到執行結果如下圖:
Docker下使用disconf:細說demo開發
  1. 打開上圖中的starter-run文件夾中的start.sh文件,最下面一行內容如下:

nohup java $JAVA_OPTS -jar ${CUR_BUNDLE_NAME} >> log_`date +%s`.log 2>&1 &

這個命令會啟動java進程,并且把輸出信息重定向到日志文件中,這樣就不便于我們觀察demo的運行效果,動手把這一行修改如下:

java $JAVA_OPTS -jar ${CUR_BUNDLE_NAME}

這樣所有的日志都會在控制臺打印出來,便于我們觀察運行狀態;

  1. 打包完成了,現在可以開始制作鏡像了,這里的基礎鏡像我選用的是,是為了圖個方便,不用安裝jdk和配置java環境了,dockerfile內容非常簡單,創建一個工作目錄,把前面打包時生成的starter-run文件夾下的所有東西都復制到這個工作目錄中去:

# Docker image of disconf consumer

# VERSION 0.0.1

# Author: bolingcavalry

#基礎鏡像使用Tomcat:7.0.77-jre8

FROM tomcat:7.0.77-jre8

#作者

MAINTAINER BolingCavalry <zq2599@gmail.com>

#定義工作目錄

ENV WORK_PATH /usr/local/work

#創建工作文件夾

RUN mkdir -p $WORK_PATH

#復制應用包到工作文件夾

COPY ./starter-run $WORK_PATH/

打開終端,在dockerfile的目錄下執行以下命令生成鏡像:

docker build -t local_disconf_standalone_demo:0.0.1 .

  1. 新建一個docker-compose.yml文件,內容如下所示::

version: '2'

services:

disconf_redis_1:

image: daocloud.io/library/redis

restart: always

disconf_redis_2:

image: daocloud.io/library/redis

restart: always

disconf_zookeeper:

image: zookeeper:3.3.6

restart: always

disconf_MySQL:

image: bolingcavalry/disconf_mysql:0.0.1

environment:

MYSQL_ROOT_PASSword: 123456

restart: always

disconf_tomcat:

image: bolingcavalry/disconf_tomcat:0.0.1

links:

- disconf_redis_1:redishost001

- disconf_redis_2:redishost002

- disconf_zookeeper:zkhost

- disconf_mysql:mysqlhost

restart: always

disconf_nginx:

image: bolingcavalry/disconf_nginx:0.0.1

links:

- disconf_tomcat:tomcathost

ports:

- "80:80"

restart: always

disconf_java:

image: local_disconf_standalone_demo:0.0.1

links:

- disconf_nginx:nginxhost

- disconf_zookeeper:zkhost

restart: always

  1. 在docker-compose.yml文件所在目錄下執行命令,啟動所有容器,如下圖:
Docker下使用disconf:細說demo開發
  1. 執行命令進入容器,再進入/usr/local/work目錄,執行./start.sh啟動demo,即可看到disconf本地運行時的啟動信息,以及每隔5秒一次的輸出配置信息;
  2. 在瀏覽器上輸入localhost,登錄disconf,用戶名密碼都是admin,修改對應的配置項,在docker容器08disconfjava1的控制臺即可看到對應的輸出,具體操作方法請參照上一章[《docker下使用disconf:極速體驗》](http://blog.csdn.net/bolingcavalry/article/details/71404395)
  3. 本章用到的docker鏡像的制作材料也已經上傳到git上,地址:git@github.com:zq2599/docker_disconf.git,目錄如下圖紅框:
Docker下使用disconf:細說demo開發

至此,一個使用disconf的demo已經完成了開發和使用,這只是給大家帶來初步的認識,deisonf的配置服務是很豐富的,大家可以在官網的文檔和demo中獲取更詳細的信息。

歡迎關注我的公眾號:程序員欣宸

分享到:
標簽:Docker disconf
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定