Consul Consul是一个SpringCloud中集成好的开源的分布式的服务注册发现中心。 由Go语言编写。支持健康检查,多数据中心还支持kv存储,采用Raft一致性算法,保证强一致性,可用性。并且和docker完美兼容。 Consul本身也是一种服务治理中心,相对于Eureka而言:Consul牺牲了部分的性能,保证了服务的强一致性。Eureka只要服务注册到主节点,就认为服务注册成功,不关其他节点是否可以正常调用。 ConsulvsEurekavsZookeeper CAP原理分别指的是,数据一致性、数据可用性、分区耐受性,这里AP和CP分别指的是:AP模式:牺牲强一致性,部分节点宕机,不会影响正常工作的节点。CP模式:牺牲数据可用性,为了保证数据的一致性,当一台机器出现故障时,所有节点的数据都不能使用。 一致性算法,使一组服务器在一个值上达成一致,所以活跃的特征在于最终每个服务器都可以决定一个值。通过值的一致能够实现对同一个数据的请求会让同一个服务器来处理。Paxos和Raft都是通过选取master来实现多节点下值的一致性。Consul的安装及启动 第一步:下载consul 根据自身的系统从官网选择合适的版本。我这里使用的是Mac,可以直接使用brew下载 同样使用Mac的小伙伴可以参考我的博客:使用Mac系统来进行Java编程brewinstallconsul 第二步:启动consul。consulagentdevuiclient0。0。0。0 启动命令各参数说明:agent:Consul的核心命令,主要作用有维护成员信息、运行状态检测、声明服务以及处理请求等server:就是代表server模式ui:代表开启web控制台bootstrapexpect:代表想要创建的集群数目,官方建议3或者5datadir:数据存储目录node:代表当前node的名称client:应该是一个客户端服务注册的地址,可以和当前server的一致也可以是其他主机地址,系统默认是127。0。0。1bind:集群通讯地址join:加入的集群地址 第三步:进入http:localhost:8500uidc1services进入ConsulUI界面 SpringCloud使用Consul作为服务治理中心 Maven依赖Consul对于SpringBoot和SpringCloud的版本有着一定的要求,所以这里展示实例demo相对完整的依赖。parentgroupIdorg。springframework。bootgroupIdspringbootstarterparentartifactIdversion2。1。2。RELEASEversionparentpropertiesproject。build。sourceEncodingUTF8project。build。sourceEncodingmaven。compiler。source1。8maven。compiler。sourcemaven。compiler。target1。8maven。compiler。targetlombokversion1。18。2lombokversionpropertiesdependencies!actuator用于检查节点健康dependencygroupIdorg。springframework。bootgroupIdspringbootstarteractuatorartifactIddependency!SpringCloudConsuldependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterconsuldiscoveryartifactIddependency!springbootdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependency!lombokdependencygroupIdorg。projectlombokgroupIdlombokartifactIdversion{lombokversion}versionoptionaltrueoptionaldependencydependencies!加入SpringCloud的Dalston版本的配置依赖dependencyManagementdependenciesdependencygroupIdorg。springframework。cloudgroupIdspringclouddependenciesartifactIdversionGreenwich。SR4versiontypepomtypescopeimportscopedependencydependenciesdependencyManagement application。properties:配置类server。port8080spring。application。namespringclouddemoproducerconsulspring。cloud。consul。host127。0。0。1spring。cloud。consul。port8500健康检查路径spring。cloud。consul。discovery。healthcheckpathactuatorhealthspring。cloud。consul。discovery。healthcheckinterval15sspring。cloud。consul。discovery。hostname127。0。0。1spring。cloud。consul。discovery。registertruespring。cloud。consul。discovery。port{server。port}consulservicenamespring。cloud。consul。discovery。serviceNamespringclouddemoproducerspring。cloud。consul。discovery。heartbeat。enabledtrue SpringCloudProducerApp:启动类EnableDiscoveryClient:用于向consul或者zookeeper作为注册中心的时候提供注册服务Slf4jSpringBootApplication(exclude{DataSourceAutoConfiguration。class})EnableDiscoveryClientpublicclassSpringCloudProducerAppextendsSpringBootServletInitializer{OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilderapplication){returnapplication。sources(SpringCloudProducerApp。class);}项目的启动方法paramargspublicstaticvoidmain(String〔〕args){SpringApplication。run(SpringCloudProducerApp。class,args);log。info(服务已经启动);}}验证 启动项目,进入http:localhost:8500uidc1servicesConsulUI界面看到新注册的服务