`
m635674608
  • 浏览: 4929263 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用consul实现服务的注册和发现

 
阅读更多

转载地址:http://blog.csdn.net/mn960mn/article/details/51768678


服务注册 - 服务进程在注册中心注册自己的位置。它通常注册自己的主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的详细资料。

服务发现 - 客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表

服务定义的格式类似如下:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片

    { 
      "service":{ 
        "id": "jetty", 
        "name": "jetty", 
        "address": "192.168.1.200", 
        "port": 8080, 
        "tags": ["dev"], 
        "checks": [ 
            { 
                "http": "http://192.168.1.200:8080/health", 
                "interval": "5s" 
            } 
        ] 
      } 
    } 


其中,check是用来做服务的健康检查的,可以有多个,也可以没有,支持多种方式的检查

check必须是script或者TTL类型的,如果是script类型,则script和interval变量必须被提供,如果是TTL类型,则ttl变量必须被提供

script是consul主动去检查服务的健康状况,ttl是服务主动向consul报告自己的健康状况

以下是几种配置方式

script check

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片

    { 
      "check": { 
        "id": "mem-util", 
        "name": "Memory utilization", 
        "script": "/usr/local/bin/check_mem.py", 
        "interval": "10s", 
        "timeout": "1s" 
      } 
    } 


HTTP check:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片

    { 
      "check": { 
        "id": "api", 
        "name": "HTTP API on port 5000", 
        "http": "http://localhost:5000/health", 
        "interval": "10s", 
        "timeout": "1s" 
      } 
    } 


TCP check:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片

    { 
      "check": { 
        "id": "ssh", 
        "name": "SSH TCP on port 22", 
        "tcp": "localhost:22", 
        "interval": "10s", 
        "timeout": "1s" 
      } 
    } 


TTL check:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片

    { 
      "check": { 
        "id": "web-app", 
        "name": "Web App Status", 
        "notes": "Web app does a curl internally every 10 seconds", 
        "ttl": "30s" 
      } 
    } 


注册服务,有三种方式,
1:通过配置文件的方式静态注册
创建文件夹/etc/consul.d
.d代表有许多配置文件在里面
vim /etc/consul.d/jetty.json  内容如下:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片

    { 
      "service":{ 
        "id": "jetty", 
        "name": "jetty", 
        "address": "192.168.1.200", 
        "port": 8080, 
        "tags": ["dev"], 
        "checks": [ 
            { 
                "http": "http://192.168.1.200:8080/health", 
                "interval": "5s" 
            } 
        ] 
      } 
    } 


重启consul,并将配置文件的路径给consul(指定参数:-config-dir /etc/consul.d)

2:通过HTTP API接口来动态注册
直接调用/v1/agent/service/register接口注册即可,需要注意的是:http method为PUT提交方式

如:

curl -X PUT -d '{"id": "jetty","name": "jetty","address": "192.168.1.200","port": 8080,"tags": ["dev"],"checks": [{"http": "http://192.168.1.104:9020/health","interval": "5s"}]}' http://192.168.1.100:8500/v1/agent/service/register


注意,这种方式,和上面的注册方式有一点不一样,body的参数,是上面service的值,这点需要注意


3:使用程序实现服务的注册和发现(Java)

首先加入consul client的依赖

[html] view plain copy
 在CODE上查看代码片派生到我的代码片

    <dependency> 
        <groupId>com.orbitz.consul</groupId> 
        <artifactId>consul-client</artifactId> 
        <version>0.12.3</version> 
    </dependency> 


[java] view plain copy
 在CODE上查看代码片派生到我的代码片

    package com.pp.cnosul; 
     
    import com.google.common.net.HostAndPort; 
    import com.orbitz.consul.AgentClient; 
    import com.orbitz.consul.Consul; 
    import com.orbitz.consul.HealthClient; 
    import com.orbitz.consul.model.agent.ImmutableRegCheck; 
    import com.orbitz.consul.model.agent.ImmutableRegistration; 
     
    public class ConsulDemo { 
     
        static Consul consul = Consul.builder().withHostAndPort(HostAndPort.fromString("192.168.1.246:8500")).build(); 
     
        /**
         * 服务注册
         */ 
        public static void serviceRegister() { 
            AgentClient agent = consul.agentClient(); 
             
            //健康检测 
            ImmutableRegCheck check = ImmutableRegCheck.builder().http("http://192.168.1.104:9020/health").interval("5s").build(); 
             
            ImmutableRegistration.Builder builder = ImmutableRegistration.builder(); 
            builder.id("tomcat1").name("tomcat").addTags("v1").address("192.168.1.104").port(8080).addChecks(check); 
             
            agent.register(builder.build()); 
        } 
         
        /**
         * 服务获取
         */ 
        public static void serviceGet() { 
            HealthClient client = consul.healthClient(); 
            String name = "tomcat"; 
            //获取所有服务 
            System.out.println(client.getAllServiceInstances(name).getResponse().size()); 
             
            //获取所有正常的服务(健康检测通过的) 
            client.getHealthyServiceInstances(name).getResponse().forEach((resp) -> { 
                System.out.println(resp); 
            }); 
        } 
         
        public static void main(String[] args) { 
            serviceRegister(); 
            serviceGet(); 
        } 
    } 


当然了,还可以使用如下consul api

[html] view plain copy
 在CODE上查看代码片派生到我的代码片

    <dependency> 
        <groupId>com.ecwid.consul</groupId> 
        <artifactId>consul-api</artifactId> 
        <version>1.1.10</version> 
    </dependency> 


[java] view plain copy
 在CODE上查看代码片派生到我的代码片

    import com.ecwid.consul.v1.ConsulClient; 
    import com.ecwid.consul.v1.ConsulRawClient; 
    import com.ecwid.consul.v1.agent.model.Service; 
     
    public class App { 
         
        public static void main(String[] args) { 
            ConsulRawClient client = new ConsulRawClient("192.168.1.100", 8500); 
            ConsulClient consul = new ConsulClient(client); 
            //获取所有服务 
            Map<String, Service> map = consul.getAgentServices().getValue(); 
        } 
    } 


其中,spring cloud 使用的就是第二种consul api

分享到:
评论

相关推荐

    .NetCore+Consul+Ocelot实现服务网关和服务注册与发现.rar

    .NetCore+Consul+Ocelot实现服务网关和服务注册与发现,此Demo是个完整的列子,下载可直接运行。

    .NET Core + Consul 服务注册与发现.rar

    完美实现了.net core + consul的功能,直接可以运行。...它内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等),使用起来也较为简单

    详解Spring Cloud Consul 实现服务注册和发现

    主要介绍了Spring Cloud Consul 实现服务注册和发现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详解使用Spring Cloud Consul实现服务的注册和发现

    主要介绍了详解使用Spring Cloud Consul实现服务的注册和发现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Ocelot-Consul:.net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡

    Ocelot-Consul .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡

    C#使用Consul集群进行服务注册与发现

    前言 我个人觉得,中间件的部署与使用是非常难记忆...它主要实现了两个功能,服务注册与发现与自身的负载均衡的集群。 我们可以把他理解为一个没有界面的应用程序,因为没有界面,所以想启动Consul就只能使用命令行了;

    consul Windows版 分布式协调服务

    consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。...

    consul_1.7.2_windows_amd64.zip 和 consul_1.7.2_linux_amd64.zip

    Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储(配置中心)、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使用起来也较为简单。...

    consul_1.2.2_linux_amd64

    与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也...

    consul.rar

    consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。...

    .NETCore微服务之基于Consul实现服务治理

    比如Airbnb的SmartStack等相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等),使用起来也较为...

    Go-Consul是用于实现分布式系统的服务发现与配置

    Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等),使用起来也较 为简单。

    供 EdgeX 微服务的 Go 实现使用的注册表客户端库 此项目包含抽象的 Registry 接口和 Consul 的实现

    供 EdgeX 微服务的 Go 实现使用的注册表客户端...初始化与注册表服务的连接,将服务注册到注册表服务以进行发现和运行状况检查回调,从注册表中拉取依赖服务的服务终结点信息。通过注册表服务检查依赖服务的运行状况。

    consul_1.6.2.exe

    consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。

    consul1.5.2Linux安装包

    包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: **服务发现**:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以...

    consul_1.10.4_windows_amd64.zip

    consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。...

    Framework注册Consul库

    .NETFramework调用Consul的动态库,内附dll及调用方式代码,用户只需要在Framework项目引用该dll,按示例代码调用,即可实现Framework程序在Consul里的注册与注销,支持Framework4.6

    consul_1.9.4_windows_amd64.zip

    consul是用于分页式系统中服务注册和发现。与其他分布式服务注册与发现的方案,Consul的方案更”一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖...

Global site tag (gtag.js) - Google Analytics