我在 Spring Boot 2 应用程序中使用 Consul 的键/值存储作为 PropertySource。(org.springframework.cloud:spring-cloud-starter-consul-config)
我可以使用 @ConfigurationProperties 从 K/V 存储中读取属性,甚至当我通过 Consul Web 界面更改值时使用 @RefreshScope 更新它们。
但我确实有一些可以在应用程序中更改的动态属性。我如何将这些更改传播到 Consul,以便这些值真正发生变化。我尝试使用该属性的 Setter,但这并没有改变 Consul 中的值。
我正在关注本教程https://learn.hashicorp.com/consul/getting-started/connect
当我运行时 consul connect proxy -sidecar-for web它开始抛出此错误:
2020-07-26T14:30:18.243+0100 [ERROR] proxy.inbound: failed to dial: error="dial tcp 127.0.0.1:0: connect: can't assign requested address"
Run Code Online (Sandbox Code Playgroud)
为什么他的演示中没有分配端口?
{
"service": {
"name": "web",
"connect": {
"sidecar_service": {
"proxy": {
"upstreams": [
{
"destination_name": "socat",
"local_bind_port": 9191
}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我决定尝试一下 Nomad,并且正在为公司的副项目建立一个小型环境。
尽管 Nomad/Consul 的文档很好而且很详细,但它们并没有达到向世界公开一个小型 Web 服务的简单任务。
按照官方教程使用 Traefik 作为负载均衡器,如何使这些公开的服务可访问?
该教程有一个脚注,指出可以通过端口 8080 从集群外部访问服务。
但在拥有 3 个服务器和 3 个客户端的集群中,我应该将 DNS 指向哪里?具有指向 3 个客户端的故障转移功能的 DNS 是否足够?我还需要为客户端提供负载均衡器吗?
我们在也运行服务的主机上使用了一个consul代理.(RabbitMQ)为了验证服务是否准备就绪,我们已经定义了基于卷曲的运行状况检查.但是,我们使用registrator使用env变量注入此检查.SERVICE_CHECK_SCRIPT =卷曲hostname:15672/....
问题是,我们还告诉consul-agent其主机名与主机相同.(我们必须拥有此功能,因为我们希望看到向consul集群注册的正确主机名.
当consul代理运行运行状况检查时,它会在自己的容器中查找URL ...这显然会失败...是否有人知道如何定义此运行状况检查(我们使用mesos来执行此操作)以便curl将尝试连接到正确的IP?
我有一个非常简单的Spring云应用程序如下:
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@EnableAutoConfiguration
public class SpringCloudConsulDemoApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(SpringCloudConsulDemoApplication.class).web(true).run(args);
}
@Value("${my.message}")
private String message;
@RequestMapping("/")
public String home() {
return message;
}
@RequestMapping("/health")
public String health() {
return "Hello world";
}
}
Run Code Online (Sandbox Code Playgroud)
我在/ config/SpringCloudConsulDemo,dev /下的consul中配置了"my.message".当我更改"my.message"的值时,我在spring cloud app中获得了一些输出:
2016-06-26 12:41:18.621 INFO 1187 --- [pool-1-thread-1] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@601c9895: startup date [Sun Jun 26 12:41:18 CST 2016]; root of context hierarchy
2016-06-26 12:41:18.631 INFO 1187 --- [pool-1-thread-1] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过执行以下操作来运行官方docker映像
docker pull consul
docker run -d --name=dev-consul -p 8500:8500 consul
Run Code Online (Sandbox Code Playgroud)
当我尝试使用curl访问领事服务器时,我得到一个空的答复
vagrant@docker:~$ curl localhost:8500/v1/catalog/nodes --verbose
* Hostname was NOT found in DNS cache
* Trying ::1...
* Connected to localhost (::1) port 8500 (#0)
> GET /v1/catalog/nodes HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8500
> Accept: */*
>
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)
我想念什么?
如何使Spring Cloud Consul向外部IP注册?
我在docker中使用spring cloud consul运行spring boot应用程序。该应用程序正在docker集群上的docker网络内部运行。
这意味着如果spring consul使用主机名或IP地址注册,它将获得docker swarm内部的主机名或ip地址。我的领事服务器在docker群之外。
我想使用Prometheus的Consul集成来自动发现我所有的领事节点。目前,我的Prometheus服务器仅从Consul中的单个数据中心接收节点,尽管我从未实际指定配置中要使用的数据中心(我猜它只是选择了我的consul-client(安装在我的prometheus服务器上)的一部分)的)。
如何从领事知道的所有数据中心获取所有节点?
我花了一点时间来研究 Consul。我已经阅读了共识协议。我看到如果 Consul 集群想要可用,它需要一个法定人数的服务器节点来选举领导者。我想知道当 consul 集群运行的节点数少于法定人数时,为什么它不使用剩余的运行节点呢?谁能为我解答?非常感谢
我知道Consul是微服务时代的服务发现工具。但是在领事之前,发明了HA Proxy。那么,为什么我们需要Consul进行服务发现,或者Consul比HA Proxy更强大?Consul和HA Proxy之间有什么比较?请给我一些建议,我应该使用还是可以同时使用它们。
consul ×10
docker ×2
java ×2
spring-cloud ×2
curl ×1
haproxy ×1
mesos ×1
nomad ×1
prometheus ×1
proxy ×1
raft ×1
registration ×1
sidecar ×1
spring ×1
spring-boot ×1
traefik ×1