您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Docker下使用disconf:细说demo开发

时间:2020-09-22 10:32:50  来源:  作者:

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中获取更详细的信息。

欢迎关注我的公众号:程序员欣宸



Tags:Docker disconf   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Docker下的disconf实战全文链接 https://blog.csdn.net/boling_cavalry/article/details/71082610; https://blog.csdn.net/boling_cavalry/article/details/71107498; https:...【详细内容】
2020-09-22  Tags: Docker disconf  点击:(83)  评论:(0)  加入收藏
▌简易百科推荐
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(10)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(10)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(47)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(33)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(61)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(167)  评论:(0)  加入收藏
环境要求 ubuntu系统:20.04 docker版本:20.10.7 redis版本:6.0.6步骤由于我这里已经有相应的redis镜像,这里就不记录了,关于docker一些基础知识可以看我以前的笔记开启3台re...【详细内容】
2021-07-26  石老师小跟班    Tags:Redis主从复制   点击:(117)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条