【问题标题】:Services communication in consul领事中的服务沟通
【发布时间】:2020-10-11 12:37:10
【问题描述】:

我正在开发几个服务,并使用 consul 作为服务注册中心。我可以向领事注册我的所有服务。

现在接下来要做的是,我需要能够从服务 A 到服务 B 进行通信。

在没有服务注册的情况下,通常我所做的只是将客户端 HTTP 请求从服务 A 发送到服务 B。

但是既然现在我已经有了服务发现,我应该通过 consul 获取服务 B 的主机地址,然后将客户端 HTTP 请求发送到服务 B 的主机地址吗?还是说consul也提供了一个API网关,所以我只需要将我的客户端HTTP请求从服务A分派给consul,然后consul会自动转发到目的地?

另外,如果有关于我的案例的相关文件,我会很乐意看一下吗? (我找不到相关文档,可能是我的google搜索关键字错误)

【问题讨论】:

    标签: microservices consul service-discovery


    【解决方案1】:

    Consul 支持两种服务发现方法,DNS 和 HTTP。

    应用程序可以针对其本地 Consul 代理执行 DNS 查找,该代理在端口 8600 上公开 DNS 服务器(您也可以配置 DNS forwarding)。例如,应用程序可以对web.service.consul 发出A 记录查询,Consul 将返回web 服务的健康实例端点列表。还支持SRV 查找,以便检索给定服务的 IP 和端口。 DNS 接口还支持按服务标签和数据中心查询端点。详情请见Consul.io: DNS - Service Lookups

    可以通过针对本地代理查询 /v1/health/service/:name 端点来执行基于 HTTP 的服务发现。以下将返回服务nginx 的健康和不健康端点的完整列表。

    $ curl http://127.0.0.1:8500/v1/health/service/nginx
    

    您可以使用passing 查询参数将输出限制为仅运行良好的服务。

    $ curl "http://127.0.0.1:8500/v1/health/service/nginx?passing"
    

    我建议查看Register a Service with Consul Service Discovery 指南,了解有关从目录注册和查询服务的更多信息。

    最后,像 Traefik 和 Solo 的 Gloo 等 API 网关支持使用 Consul 进行服务发现(请参阅 Traefik 的 Consul Catalog Provider 和 Gloo 的 Consul Services)。您可以将服务配置为将请求路由到这些网关,并允许网关转发到后端目的地。

    【讨论】:

      【解决方案2】:

      我最终从领事那里得到了服务信息列表,然后对其进行名称匹配,然后得到服务地址。

      我使用此端点来获取服务列表及其数据:

      http://localhost:8500/v1/agent/services
      

      所以我猜这是客户端发现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        • 2021-01-18
        • 2019-08-23
        相关资源
        最近更新 更多