consul上手体验

Eureka 2.0 开源工作宣告停止,对于注册中心来说 Consul 是个更好的选择。

consul 介绍
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,比如 Airbnb的SmartStack等相比,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较 为简单。Consul用Golang实现,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。 

一、Consul 安装

下载:
https://www.consul.io/downloads.html

解压:
Consul 安装包解压完成之后就是一个可执行程序,直接运行即可。
Consul 默认启动为 dev 模式,重启后丢失数据,启动参数详解请见附录部分。
启动:
1、Windows:
consul.exe agent -server -bootstrap -advertise 127.0.0.1 -data-dir ./data -ui
2、Linux:
consul  agent -server -bootstrap -advertise 127.0.0.1 -data-dir ./data -ui
3、Mac:
//添加到usr/local/bin目录,就可以在任何地方访问 consul
sudo cp consul /usr/local/bin
//consul 如果没有可执行权限
sudo chmod a+x consul
consul  agent -server -bootstrap -advertise 127.0.0.1 -data-dir ./data -ui

 

consul 已经成功启动。

二、创建consul-demo注入到 consul 服务中

pom.xml

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

application.yml

management:
  endpoints:
    web:
      exposure:
        include: '*'
spring:
  application:
    name: consul-demo
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500

App.java


@SpringBootApplication
public class App {

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

}

启动 consul-demo……

刷新127.0.0.1:8500

可以看到我们的微服务已经成功的注入到了 consul 中。

三、consul 中key/value的使用

新建 consul-demo-1工程

pom.xml


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-all</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

这里spring-cloud-starter-consul-all 包含了:

        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-bus</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>

bootstrap.yml:

spring:
  application:
    name: consul-demo-1
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      config:
        format: yaml
server:
  port: 8081

App.java


@SpringBootApplication
@RestController
public class App {

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

    @Autowired
    ServerProperties serverProperties;

    @RequestMapping("port" )
    public   String  port(){
        
     return  "配置文件中的 port="+serverProperties.getPort();
     
    }
    
}

启动……

在 log 中,propertySources=[ConsulPropertySource {name='config/consul-demo-1/'}, ConsulPropertySource {name='config/application/'}]

注意:application 为所有服务的通用配置,consul-demo-1为consul-demo-1专属配置。

在consul 中添加配置信息:

点击保存后,在 consul-demo-1在控制台打印了:

 

配置文件中的 server.port已发生改变,但是consul-demo-1服务的端口还是8081,重启consul-demo-1……

猜你喜欢

转载自blog.csdn.net/hong10086/article/details/89436048