欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

搭建 Spring Cloud Consul

程序员文章站 2022-07-14 22:42:50
...

搭建 Spring Cloud Consul

Consul vs. Eureka
Consul vs Eureka vs Zookeeper
Why was Eureka 2.0 discontinued? #1129
关于Eureka 2.x,别再人云亦云了!
Eureka 2.0 is discontinued. What service discovery platform is Netflix using now?

Consul 是一个分布式服务注册与发现,用于跨任何运行时平台和公共或私有云连接、保护和配置服务。它内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案。
它是 go 语言写。

Spring Cloud Consul 是 Spring Cloud 家族的一个项目,致力于提供简洁的整合 Consul。

搭建的时候出现问题,可以在下面留言。

1. 问题列表

IllegalStateException: No instances available

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2. 部署 consul

官网下载安装包,解压后运行下面的命令。

./consul agent -server -bootstrap-expect=1 -data-dir=consul-data -ui -bind=127.0.0.1

这只适合于测试环境,并不适合生产环境的部署。

3. 注册服务

3.1 服务生产者

新建一个 Spring Boot 工程,引入依赖。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<optional>true</optional>
</dependency>

代码

@RestController
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }
}

3.2 添加应用名配置

application.properties 中配置

spring.application.name=data-service

启动服务,访问 http://localhost:8500/ui,可以看到服务注册到 consul 上了。
搭建 Spring Cloud Consul

3.3 consul 的其他配置

ip

spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500

服务标识符

spring.cloud.consul.discovery.instanceid=${spring.application.name}:${random.value}

默认是 ${spring.application.name}:${profiles}:${port}

4. 服务发现

4.1 服务消费者

新建一个 Spring Boot 工程,引入同样的依赖。

@RestController
@SpringBootApplication
public class Application {
    @Autowired
    RestTemplate restTemplate;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @LoadBalanced
    @Bean
    public RestTemplate loadBalancedRestTemplate() {
        return new RestTemplate();
    }

    @RequestMapping("/")
    public String home() {
        return this.restTemplate.getForObject("http://data-service", String.class);
    }
}

5. 健康检查

6. 配置中心

6.2 通过UI页面进行配置

  • application.properties 重命名为 bootstrap.properties
  • 添加一条属性
    spring.cloud.consul.config.enabled=true
    

就可以通过UI页面添加配置了。比如key是/config/data-service/test/msg,value是Hello World from Spring Cloud Consul
搭建 Spring Cloud Consul
测试代码

@RestController
class ExternalConfigurationController{
	@Value("${test.msg}")
	String value;

	@GetMapping("/getConfigValue")
	public String getConfigValue(){
		return value;
	}
}

6.1 结合git

我们总不能在生成环境也用UI页面进行配置吧,能不能像 Spring Cloud Config 一样使用 git 呢。答案是可以的,但是 consul 原生并不支持这种操作,那岂不是浪费了他的 K/V 特性,幸好有 git2consul。可惜他是用 node 实现的。

7. 参考文档

A Detailed Guide to Spring Cloud Consul
Consul Guides
git2consul使用踩过的坑
spring cloud: 使用consul来替换config server
springcloud2.x gitlab consul集成配置中心踩坑

相关标签: Spring Cloud consul