首页 > 其他分享 >diamond_使用与简介

diamond_使用与简介

时间:2023-06-15 11:01:02浏览次数:32  
标签:ip diamond gome 简介 配置 使用 com groupId


 

它是什么

diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,

而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据.


为什么需要它

diamond的特点是简单、可靠、易用:

简单:整体结构非常简单,从而减少了出错的可能性。

可靠:应用方在任何情况下都可以启动,在承载阿里核心系统并正常运行多年来,没有出现过任何重大故障。

易用:客户端使用只需要两行代码,暴露的接口都非常简单,易于理解。


常见应用场景

  1. 分表分库的DB服务器地址.
  2. 中间件的服务地址.
  3. 经常变化的开关,配置.

简单使用

引入


       
 
          < 
          dependency 
          > 
         
 
         
 
             
          < 
          groupId 
          >com.taobao.diamond</ 
          groupId 
          > 
         
 
         
 
             
          < 
          artifactId 
          >diamond-client</ 
          artifactId 
          > 
         
 
         
 
             
          < 
          version 
          >2.0.5.4.taocode-SNAPSHOT</ 
          version 
          > 
         
 
         
 
          </ 
          dependency 
          > 



  

客户端代码(推荐使用方式3,若想绕过其它使用方式,强制使用方式三,DefaultDiamondManager最后一个参数写成true):



DiamondClientExample



          package 
          com.taobao.diamond.client; 
         
 
         
 
          import 
          java.util.concurrent.Executor; 
         
 
         
 
          import 
          com.taobao.diamond.manager.DiamondManager; 
         
 
         
 
          import 
          com.taobao.diamond.manager.ManagerListener; 
         
 
         
 
          import 
          com.taobao.diamond.manager.impl.DefaultDiamondManager; 
         
 
         
 
          /** 
         
 
         
 
            
          * <pre> 
         
 
         
 
            
          * diamond-server的ip列表依次按如下方式<1>,<2>,<3>寻找,寻到配置的ip列表就结束寻找,没寻找到就报异常. 
         
 
         
 
            
          * 使用diamond时, 
         
 
         
 
            
          *  
         
 
         
 
            
          * 方式<1>: 
         
 
         
 
            
          *      DefaultDiamondManager构造器中如果指定了ip列表,则以这个ip列表为准 
         
 
         
 
            
          * 方式<2>: 
         
 
         
 
            
          *      类路径下,增加配置文件ServerAddress,其中指定ip列表 
         
 
         
 
            
          * 新方式<3>(兼容老方式): 
         
 
         
 
            
          *      diamond-client首次启用会自动添加.diamond.domain文件到用户目录下 
         
 
         
 
            
          *      客户端会使用文件中配置的域名来访问diamond-server 
         
 
         
 
            
          *      各环境域名: 
         
 
         
 
            
          *      diamond.sit.ds.gome.com.cn 
         
 
         
 
            
          *      diamond.uat.ds.gome.com.cn 
         
 
         
 
            
          *      diamond.pre.ds.gome.com.cn 
         
 
         
 
            
          *      diamond.live.ds.gome.com.cn 
         
 
         
 
            
          *  
         
 
         
 
            
          * 文件.diamond.domain说明: 
         
 
         
 
            
          *  (1)windows和mac的操作系统默认内容是diamond.sit.ds.gome.com.cn,可以自行修改 
         
 
         
 
            
          *  (2)linux操作系统不设置默认内容,需要修改.diamond.domain来选择域名 
         
 
         
 
            
          *  (3)若要兼容老的域名访问方式,请在.diamond.domain中配置a.b.c,同时在/etc/hosts配置a.b.c指向自己的nginx 
         
 
         
 
            
          *  
         
 
         
 
            
          *  
         
 
         
 
            
          * </pre> 
         
 
         
 
            
          *  
         
 
         
 
            
          * @author liutingfeng 
         
 
         
 
            
          *  
         
 
         
 
            
          */ 
         
 
         
 
          public 
          class 
          DiamondTestClient { 
         
 
         
 
               
          public 
          static 
          DiamondManager manager; 
         
 
         
 
               
          public 
          static 
          void 
          main(String[] str) { 
         
 
         
 
                   
          initDiamondManager(); 
         
 
         
 
               
          } 
         
 
         
 
               
          private 
          static 
          void 
          initDiamondManager() { 
         
 
         
 
                   
          manager =  
          new 
          DefaultDiamondManager( 
          "group_test" 
          ,  
          "dataId_test" 
          ,  
          new 
          ManagerListener() { 
         
 
         
 
                       
          public 
          void 
          receiveConfigInfo(String configInfo) { 
         
 
         
 
                           
          restart(); 
         
 
         
 
                       
          } 
         
 
         
 
                       
          public 
          Executor getExecutor() { 
         
 
         
 
                           
          return 
          null 
          ; 
         
 
         
 
                       
          } 
         
 
         
 
                   
          }, 
          true 
          ); 
          //true表示强制使用域名 
         
 
         
 
                   
          restart(); 
         
 
         
 
               
          } 
         
 
         
 
               
          private 
          static 
          void 
          restart() { 
         
 
         
 
                   
          String availableConfigureInfomation = manager.getAvailableConfigureInfomation( 
          5000 
          ); 
         
 
         
 
                   
          System.out.println( 
          "availableConfigureInfomation=" 
          + availableConfigureInfomation); 
         
 
         
 
               
          } 
         
 
         
 
          } 
         

 



 

服务端配置

diamond_使用与简介_置数据

 

国美线上的部署结构

diamond_使用与简介_spring_02

 

容灾性

1、数据库不可用.

2、所有server均不可用.

3、client主动删除了snapshot.

4、client没有备份配置数据,导致其不能配置“容灾目录”.

diamond与springPropertyPlaceholder动态集成

///动态配置说明/
1.引入



          < 
          dependency 
          > 
         
 
         
 
             
          < 
          groupId 
          >com.gome</ 
          groupId 
          > 
         
 
         
 
             
          < 
          artifactId 
          >gome-common-spring</ 
          artifactId 
          > 
         
 
         
 
             
          < 
          version 
          >1.0.0</ 
          version 
          > 
         
 
         
 
          </ 
          dependency 
          > 
         
 
         
 
          < 
          dependency 
          > 
         
 
         
 
             
          < 
          groupId 
          >com.taobao.diamond</ 
          groupId 
          > 
         
 
         
 
             
          < 
          artifactId 
          >diamond-client</ 
          artifactId 
          > 
         
 
         
 
             
          < 
          version 
          >2.0.5.4.taocode-SNAPSHOT</ 
          version 
          > 
         
 
         
 
          </ 
          dependency 
          > 
         
 
         
 
          < 
          dependency 
          > 
         
 
         
 
             
          < 
          groupId 
          >com.taobao.diamond</ 
          groupId 
          > 
         
 
         
 
             
          < 
          artifactId 
          >diamond-utils</ 
          artifactId 
          > 
         
 
         
 
             
          < 
          version 
          >2.0.5.4.taocode-SNAPSHOT</ 
          version 
          > 
         
 
         
 
          </ 
          dependency 
          > 



2.项目下
  config.properties //配置了diamond定义的配置信息的 groupId和dataId 名称
  //注意这个配置规范
  ServerAddress //配置diamond的服务器pi地址

3.spring 配置


    < 
          bean 
          id 
          = 
          "diamondProperties" 
          class 
          = 
          "com.gome.spring.utils.DiamondProperties" 
          /> 
         
 
         
 
          < 
          bean 
          id 
          = 
          "customPropertyConfigurer" 
         
 
         
 
            
          class 
          = 
          "com.gome.spring.lang.CustomPropertyPlaceholderConfigurer" 
          > 
         
 
         
 
            
          < 
          constructor-arg 
          index 
          = 
          "0" 
          > 
         
 
         
 
            
          < 
          set 
          > 
         
 
         
 
            
          <!-- 注意这里若没有本地配置文件时可以不配置value,但constructor-arg index set必须保留 若配置了本地配置文件,则该配置将和diamond远程配置文件合并 --> 
         
 
         
 
            
          < 
          value 
          >classpath:internal.properties</ 
          value 
          > 
         
 
         
 
            
          </ 
          set 
          > 
         
 
         
 
            
          </ 
          constructor-arg 
          > 
         
 
         
 
            
          < 
          constructor-arg 
          index 
          = 
          "1" 
          ref 
          = 
          "diamondProperties" 
          /> 
         
 
         
 
          </ 
          bean 
          >  
         
 



diamond执行流程

1.读本地用户目录下 .diamond.domain 文件中的域名 ,比如 diamond.uat.ds.gome.com.cn , 如果使用a.b.c 需要在服务器hosts文件中配置

2.读步骤1中域名对应的ip , 比如:ping diamond.uat.ds.gome.com.cn ==> 10.58.50.110

3.通过步骤2中的ip取出可用的diamond-server列表, 访问 http://ip/url , 比如:curl 'http://diamond.uat.ds.gome.com.cn/url' ==> 10.58.50.204,10.58.50.205

4.通过步骤3中的ip列表,提取数据,比如(苦中group,dataId由程序中给定):curl 'http://10.58.50.204/diamond-server/config.co?group=zookeeper&dataId=url' ==> 10.58.50.203:2181,10.58.50.204:2181,10.58.50.205:2181


相关链接

阿里中间件团队技术博客 http://jm.taobao.org/ .


  • diamond_使用与简介_置数据_03

  • 大小: 154.4 KB
  • diamond_使用与简介_spring_04

  • 大小: 131.3 KB
  • 查看图片附件

标签:ip,diamond,gome,简介,配置,使用,com,groupId
From: https://blog.51cto.com/u_16070335/6485406

相关文章

  • 如何使用libavcodec将.yuv图像序列编码为.h264的视频码流?
    1.实现打开和关闭输入文件和输出文件的操作点击查看代码//io_data.cppstaticFILE*input_file=nullptr;staticFILE*output_file=nullptr;int32_topen_input_output_files(constchar*input_name,constchar*output_name){if(strlen(input_name)==0||strlen(ou......
  • 全面的ASP.NET Core Blazor简介和快速入门
    思维导航前言Blazor是什么?Blazor的优势和特点Blazor的劣势Blazor支持的平台Blazor三种托管模型及其各自特点如何选择要使用的托管模型?Razor语法简述新建ZeroBlazor空白解决方案使用VS2022快速创建BlazorServer应用使用VS2022快速创建BlazorWebAssembly应用课外......
  • elasticsearch的使用
    elasticsearch的使用索引管理1、创建索引对比关系型数据库,创建索引相当于创建数据库url:http:/ip:9200/test方式:PUT不允许重复put相同索引2、获取索引a、将请求方式改为get即获取当前索引信息url:ip:9200/test方式:GETb、获取所有索引信息url:ip:9200/_ca......
  • 如何生成和使用requirements.txt
    当开发Python项目时,使用第三方库是很常见的。为了确保项目的可移植性和可重复性,通常会将项目所依赖的库及其版本记录在一个名为requirements.txt的文件中。这样,其他人可以通过该文件轻松地安装项目所需的所有库及其指定版本。以下是如何使用pip生成和安装requirements.txt......
  • 使用Spring Boot和H2完全工作的原型
    我们在Spring中使用了很多H2,特别是用于单元测试。但是,我们可能希望拥有一个包含数据的全功能原型,而不是单元测试。H2是完美的候选者。它适用于Spring,与大多数数据库具有很强的语法兼容性,并提供用于检查数据的UI。想象一下面试任务的情景。您希望您的示例开箱即用,尽可能少的配置为审......
  • 为什么软件要使用代码签名证书?
    在当下木马和病毒横行的互联网世界,越来越多的软件被恶意攻击,这一现实状况使得用户开始在下载软件之前验证其真实性。而代码签名证书的作用正在于验证软件的真实来源,它将向用户证明负责该代码的企业或个人的身份,并确认该代码自应用签名以来从未修改过。代码签名的定义代码签名是......
  • docker安装与使用教程
    https://mp.weixin.qq.com/s?__biz=MjM5NTY1MjY0MQ==&mid=2650860524&idx=3&sn=02dfc31d637f70b066a6ef9842beeac5&chksm=bd017ea28a76f7b466773e68f7dab26e65ffae2918c28aa1d87c84acfc54460a7b82aa57279f&scene=27  官方的一键安装方式:curl -fsSL https://ge......
  • C#中使用CAS实现无锁算法
    CAS的基本概念CAS(Compare-and-Swap)是一种多线程并发编程中常用的原子操作,用于实现多线程间的同步和互斥访问。它操作通常包含三个参数:一个内存地址(通常是一个共享变量的地址)、期望的旧值和新值。CompareAndSwap(内存地址,期望的旧值,新值)CAS操作会比较内存地址处的值与期望......
  • 使用cordova
    常用指令提前搭建好node环境使用node安装cordovanpminstall-gcordova创建项目cordovacreateHelloCordovaio.hellocordovaCordovaApp添加插件cordovapluginaddeg:cordovapluginaddcordova-plugin-file添加平台cordovaplatformadd查看平台和插件下的......
  • [ARM汇编]ARM体系结构简介—1.2.1 ARM处理器的历史与发展
    ARM(Advanced RISC Machine,先进的精简指令集计算机)处理器是一种广泛应用于嵌入式系统的处理器架构,具有低功耗、高性能、低成本等特点。接下来,我们将介绍ARM处理器的历史与发展。ARM处理器的历史ARM处理器的历史可以追溯到1983年,当时英国的Acorn电脑公司为了研发一款新......