Spring Cloud Consul
1.2.0.RELEASE
该项目通过自动配置并绑定到Spring环境和其他Spring编程模型成语,为Spring Boot应用程序提供Consul集成。通过几个简单的注释,您可以快速启用和配置应用程序中的常见模式,并使用基于Consul的组件构建大型分布式系统。提供的模式包括服务发现,控制总线和配置。智能路由(Zuul)和客户端负载平衡(Ribbon),断路器(Hystrix)通过与Spring Cloud Netflix的集成提供。
安装Consul
请参阅安装文档获取有关如何安装Consul指令。
Consul Agent
所有Spring Cloud Consul应用程序必须可以使用Consul Agent客户端。默认情况下,代理客户端预计位于localhost:8500
。有关如何启动代理客户端以及如何连接到Consul Agent服务器的集群的详细信息,请参阅代理文档。对于开发人员,在安装了领事后,您可以使用以下命令启动Consul Agent:
./src/main/bash/local_run_consul.sh
这将启动端口8500上的服务器模式的代理,其中ui可以在http:// localhost:8500上找到
服务发现与Consul
服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱。Consul通过HTTP API和DNS提供服务发现服务。Spring Cloud Consul利用HTTP API进行服务注册和发现。这不会阻止非Spring云应用程序利用DNS界面。Consul代理服务器在通过八卦协议进行通信的群集中运行,并使用筏式协议协议。
如何激活
要激活Consul服务发现,请使用组org.springframework.cloud
和工件id spring-cloud-starter-consul-discovery
的启动器。有关使用当前Spring云端列车设置构建系统的详细信息,请参阅Spring云计算页面。
注册Consul
当客户端注册Consul时,它提供有关自身的元数据,如主机和端口,ID,名称和标签。默认情况下,将创建一个HTTP 检查,每隔10秒Consul命中/health
端点。如果健康检查失败,则服务实例被标记为关键。
示例Consul客户端:
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class Application {
@RequestMapping("/")
public String home() {
return "Hello world";
}
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
(即完全正常的Spring Boot应用程序)。如果Consul客户端位于localhost:8500
以外的位置,则需要配置来定位客户端。例:
spring:
cloud:
consul:
host: localhost
port: 8500
警告
|
如果您使用Spring Cloud Consul Config,上述值将需要放置在bootstrap.yml 而不是application.yml 中。 |
从Environment
获取的默认服务名称,实例ID和端口分别为${spring.application.name}
,Spring上下文ID和${server.port}
。
@EnableDiscoveryClient
使应用程序成为Consul“服务”(即注册自己)和“客户端”(即可以查询Consul查找其他服务)。
HTTP健康检查
Consul实例的运行状况检查默认为“/ health”,它是Spring Boot Actuator应用程序中有用端点的默认位置。如果您使用非默认上下文路径或servlet路径(例如server.servletPath=/foo
)或管理端点路径(例如management.context-path=/admin
)),则需要更改这些,即使是执行器应用程序。也可以配置Consul用于检查运行状况端点的间隔。“10s”和“1m”分别表示10秒和1分钟。例:
spring:
cloud:
consul:
discovery:
healthCheckPath: ${management.context-path}/health
healthCheckInterval: 15s
元数据和Consul标签
Consul尚不支持服务元数据。Spring Cloud的ServiceInstance
有一个Map<String, String> metadata
字段。Spring Cloud Consul使用Consul标签来近似元数据,直到Consul正式支持元数据。具有key=value
形式的标签将被分割并分别用作Map
键和值。没有相等=
符号的标签将被用作键和值两者。
spring:
cloud:
consul:
discovery:
tags: foo=bar, baz
上述配置将导致具有foo→bar
和baz→baz
的地图。
使Consul实例ID唯一
默认情况下,一个领事实体注册了一个等于其Spring应用程序上下文ID的ID。缺省情况下,Spring应用上下文ID为${spring.application.name}:comma,separated,profiles:${server.port}
。在大多数情况下,这将允许一个服务的多个实例在一台机器上运行。如果需要进一步的唯一性,使用Spring Cloud可以通过在spring.cloud.consul.discovery.instanceId
中提供唯一的标识来覆盖此。例如:
spring:
cloud:
consul:
discovery:
instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
使用这个元数据和在localhost上部署的多个服务实例,随机值将在那里进行,以使实例是唯一的。在Cloudfoundry中,vcap.application.instance_id
将在Spring Boot应用程序中自动填充,因此不需要随机值。
使用DiscoveryClient
Spring Cloud支持Feign(一个REST客户端构建器),还支持Spring RestTemplate
使用逻辑服务名称而不是实际的URL。
您还可以使用org.springframework.cloud.client.discovery.DiscoveryClient
,它为Netflix不具体的发现客户端提供简单的API,例如
@Autowired
private DiscoveryClient discoveryClient; public String serviceUrl() {
List<ServiceInstance> list = discoveryClient.getInstances("STORES");
if (list != null && list.size() > 0 ) {
return list.get(0).getUri();
}
return null;
}
具有Consul的分布式配置
Consul提供了用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config
文件夹中。根据应用程序的名称和模拟Spring Cloud Config顺序解析属性的活动配置文件,创建多个PropertySource
实例。例如,名为“testApp”的应用程序和“dev”配置文件将创建以下属性源:
config/testApp,dev/
config/testApp/
config/application,dev/
config/application/
最具体的物业来源位于顶部,底部最不具体。Properties是config/application
文件夹适用于使用consul进行配置的所有应用程序。config/testApp
文件夹中的Properties仅适用于名为“testApp”的服务实例。
配置当前在应用程序启动时被读取。发送HTTP POST到/refresh
将导致重新加载配置。观看键值存储(Consul支持))目前不可能,但将来将是此项目的补充。
如何激活
要开始使用Consul配置,请使用组org.springframework.cloud
和工件id spring-cloud-starter-consul-config
的启动器。有关使用当前Spring云端列车设置构建系统的详细信息,请参阅Spring云计算页面。
这将启用将配置Spring Cloud Consul配置的自动配置。
定制
可以使用以下属性自定义Consul配置:
spring:
cloud:
consul:
config:
enabled: true
prefix: configuration
defaultContext: apps
profileSeparator: '::'
enabled
将此值设置为“false”将禁用Consul配置prefix
设置配置值的基本文件夹defaultContext
设置所有应用程序使用的文件夹名称profileSeparator
设置分隔符的值,用于使用配置文件在属性源中分隔配置文件名称
配置观察
Consul配置观察功能可以利用领事看守钥匙前缀的能力。Config Watch会阻止Consul HTTP API调用,以确定当前应用程序是否有任何相关配置数据发生更改。如果有新的配置数据,则会发布刷新事件。这相当于调用/refresh
执行器端点。
要更改Config Watch调用的频率change spring.cloud.consul.config.watch.delay
。默认值为1000,以毫秒为单位。
禁用Config Watch集合spring.cloud.consul.config.watch.enabled=false
。
YAML或Properties配置
存储与YAML或Properties格式的一组属性相对于单个键/值对可能更为方便。将spring.cloud.consul.config.format
属性设置为YAML
或PROPERTIES
。例如使用YAML:
spring:
cloud:
consul:
config:
format: YAML
必须在适当的data
键中设置YAML。使用键上面的默认值将如下所示:
config/testApp,dev/data
config/testApp/data
config/application,dev/data
config/application/data
您可以将YAML文档存储在上述任何键中。
您可以使用spring.cloud.consul.config.data-key
更改数据密钥。
git2consul与配置
git2consul是一个Consul社区项目,将文件从git存储库加载到各个密钥到Consul。默认情况下,密钥的名称是文件的名称。分别支持文件扩展名为.yml
和.properties
的YAML和Properties文件。将spring.cloud.consul.config.format
属性设置为FILES
。例如:
spring:
cloud:
consul:
config:
format: FILES
给定/config
中的以下密钥,development
配置文件和应用程序名称为foo
:
.gitignore
application.yml
bar.properties
foo-development.properties
foo-production.yml
foo.properties
master.ref
将创建以下属性来源:
config/foo-development.properties
config/foo.properties
config/application.yml
每个键的值需要是一个格式正确的YAML或Properties文件。
快速失败
在某些情况下(如本地开发或某些测试场景)可能会方便,如果不能配置领事,则不会失败。在bootstrap.yml
中设置spring.cloud.consul.config.failFast=false
将导致配置模块记录一个警告而不是抛出异常。这将允许应用程序继续正常启动。
Consul重试
如果您希望您的应用程序启动时可能偶尔无法使用代理商,则可以要求您在发生故障后继续尝试。您需要在您的类路径中添加spring-retry
和spring-boot-starter-aop
。默认行为是重试6次,初始退避间隔为1000ms,指数乘数为1.1,用于后续退避。您可以使用spring.cloud.consul.retry.*
配置属性配置这些属性(和其他)。这适用于Spring Cloud Consul配置和发现注册。
提示
|
要完全控制重试,请使用id为“consulRetryInterceptor”添加RetryOperationsInterceptor 类型的@Bean 。Spring重试有一个RetryInterceptorBuilder ,可以轻松创建一个。 |
Spring Cloud Bus与Consul
如何激活
要开始使用Consul总线,请使用组org.springframework.cloud
和工件ID spring-cloud-starter-consul-bus
的启动器。有关使用当前Spring云端列车设置构建系统的详细信息,请参阅Spring云计算页面。
有关可用的执行机构端点以及如何发送自定义消息,请参阅Spring Cloud Bus文档。
断路器与Hystrix
应用程序可以使用Spring Cloud Netflix项目提供的Hystrix断路器,将此启动器包含在项目pom.xml:spring-cloud-starter-hystrix
中。Hystrix不依赖于Netflix Discovery Client。@EnableHystrix
注释应放置在配置类(通常是主类)上。那么方法可以用@HystrixCommand
注释来被断路器保护。有关详细信息,请参阅文档。
使用Turbine和Consul Hystrix指标聚合
Turbine(由Spring Cloud Netflix项目提供),聚合多个实例Hystrix指标流,因此仪表板可以显示聚合视图。Turbine使用DiscoveryClient
接口查找相关实例。要将Turbine与Spring Cloud Consul配合使用与以下示例类似的方式配置Turbine应用程序:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
请注意,Turbine依赖不是起始者。涡轮启动器包括对Netflix Eureka的支持。
spring.application.name: turbine
applications: consulhystrixclient
turbine:
aggregator:
clusterConfig: ${applications}
appConfig: ${applications}
clusterConfig
和appConfig
部分必须匹配,因此将逗号分隔的服务标识列表放在单独的配置属性中是有用的。
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class Turbine {
public static void main(String[] args) {
SpringApplication.run(DemoturbinecommonsApplication.class, args);
}
}
Spring Cloud Consul的更多相关文章
- Spring Cloud Consul入门
1. Consul介绍 Consul是一套开源的分布式服务发现和配置管理系统,支持多数据中心分布式高可用.Consul是HashiCorp( Vagrant的创建者)开发的一个服务发现与配置项目,用G ...
- Spring Cloud Consul 实现服务注册和发现
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为基于 JVM 的云应用开发中涉及的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布 ...
- Spring Cloud Consul使用——服务注册与发现(注册中心)
整理自该文章 一.Consul 服务端接下来我们开发 Consul 的服务端,创建一个 spring-cloud-consul-producer 项目 1.添加依赖包 <dependencies ...
- Spring Cloud Consul 之Greenwich版本全攻略
什么是Consul Consul是HashiCorp公司推出的开源软件,使用GO语言编写,提供了分布式系统的服务注册和发现.配置等功能,这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全 ...
- 服务注册发现、配置中心集一体的 Spring Cloud Consul
前面讲了 Eureka 和 Spring Cloud Config,今天介绍一个全能选手 「Consul」.它是 HashiCorp 公司推出,用于提供服务发现和服务配置的工具.用 go 语言开发,具 ...
- Spring Cloud Consul Config 知识点
Spring Cloud Consul Config 是 Config Server 和 Client的替代方案. 搭建一个配置中心,可以选择的方案: Spring Cloud Config 或者 S ...
- spring cloud consul上下线体验
spring cloud consul中默认会将spring.application.name作为ID 同一服务起多个实例时,ID默认会变成${spring.application.name}-${s ...
- Spring Cloud Consul综合整理
该项目通过自动配置和Spring环境以及其他Spring编程模型习惯用法提供了Spring Boot应用程序的Consul集成. 通过一些简单的注释,您可以快速启用和配置应用程序内的通用模式,并使用基 ...
- Spring Cloud Consul 入门指引
1 概述 Spring Cloud Consul 项目为 Spring Boot 应用程序提供了与 Consul 的轻松集成. Consul 是一个工具,它提供组件来解决微服务架构中一些最常见的挑战: ...
随机推荐
- 奥比中光3D视觉传感器--OpenNI 2配置
PrimeSense是Kinect一代的芯片供应商,位于以色列,也是开源体感开发包OpenNI 的维护者.自从被 Apple 收购后,销声匿迹,OpenNI 也停止更新.现在可以从网站http://s ...
- SSM框架搭建总结(2)
一.开发环境搭建 1.本地jdk安装及配置环境变量 2.本地tomcat安装 3.本地maven安装 3.1 maven安装 3.2 maven数据仓库配置settings.xml 4.本地安装SVN ...
- 【JS】移动端 好用的分享插件 soshm.js
参考链接:https://www.cnblogs.com/milo-wjh/p/6796082.html 对于qq内置浏览器分享功能处理:https://www.cnblogs.com/xuzheng ...
- servlet保存数据的几种方式
In Servlets you have 4 scopes where you can store data. Application Session Request Page
- 系统空间占用排查 tomcat超大日志catalina.out 删除 与df 状态更新
二.catalina.out占用多达60+G 并且其他诸如catalina.2016-03-29.log等具体日期的日志文件,个别的也有10G左右,直接删除这些大个头.df看稍有改善.针对catali ...
- ios中layoutsubview何时被调用
layoutsubview和viewDidlayoutsubview(控制器)被调用的集中情况 一:当view的frame或bounds发生改变 1:直接改view的frame或bounds 会调用v ...
- 大道至简的C语言内存管理
C语言内存的开辟和释放需要程序员自己来实现. 而C语言的内存开辟和释放只在stdlib.h里面提供了四个函数,这么简洁的设计就足以完成一切工作. C++里面各种类型的指针漫天飞舞,显得啰嗦冗余. ca ...
- Jetty安装配置
1) 从官方网站下载绿色版的jetty 下载地址:http://download.eclipse.org/jetty/ 我下载的是 jetty-distribution-7.5.4.v20111024 ...
- 神文章1:去年(2011)一年干了些啥? -vivo神人
评论: 来自豆瓣的vivo神人,之前不知道有着一号牛逼的人物,觉此人博学.有正义感,其中有一片文章述说了中国近代经济演变历史情况,于我感触很深.因时间关系,没通读,有时间一定读完(微博口水杂录简略看了 ...
- 淘宝JAVA中间件Diamond详解之简介&快速使用 管理持久配置的系统
http://my.oschina.net/u/435621/blog/270483?p=1 淘宝JAVA中间件Diamond详解(一)---简介&快速使用 大家好,今天开始为大家带来我们通用 ...