Spring Cloud Consul 和 Consul Clients dockerized

Posted

技术标签:

【中文标题】Spring Cloud Consul 和 Consul Clients dockerized【英文标题】:Spring Cloud Consul and Consul Clients dockerized 【发布时间】:2020-05-18 22:23:18 【问题描述】:

我有 2 个应用程序,都是使用 spring boot 编写的。两者都在不同的 docker 容器中运行。我也有领事在不同的 docker 容器中运行。我使用 docker-compose.yml 文件为 consul 公开了端口 8500。那么,我如何指定我的 Spring Boot 应用程序在哪里注册自己,即 consul 在哪里运行。我要给出映射端口的地址(映射到我的本地机器的端口),还是进行一些其他更改?

我现在使用的例子:https://github.com/Java-Techie-jt/cloud-consul-service-discovery

编辑:

docker-compose.yml:

version: "2"

services:
  consul:
    container_name: consul
    image: consul
    expose:
      - "8300"
      - "8400"
      - "8500"
    restart: always
  registrator:
    container_name: registrator
    image: gliderlabs/registrator:master
    volumes:
      - "/var/run/docker.sock:/tmp/docker.sock"
    command: -internal consul://consul:8500
    restart: always
    depends_on:
      - consul
  web1:
    image: deis/mock-http-server
    container_name: web1
    expose:
      - "8080"
    environment:
      SERVICE_NAME: "web"
      SERVICE_TAGS: "web"
    restart: always
    depends_on:
      - registrator
  web2:
    image: deis/mock-http-server
    container_name: web2
    expose:
      - "8080"
    environment:
      SERVICE_8080_NAME: "web"
      SERVICE_8080_TAGS: "web"
    restart: always
    depends_on:
      - registrator
  haproxy:
    build: ./haproxy
    container_name: my-haproxy
    image: anthcourtney/haproxy-consul
    ports:
      - 80
    depends_on:
      - web1
      - web2
  test:
    container_name: test-client
    build: ./test
    depends_on:
      - haproxy

networks:
  default:

【问题讨论】:

【参考方案1】:

您可以将注册器用于您的服务注册。 Registrator 通过在容器上线时检查容器来自动注册和注销任何 Docker 容器的服务。 Registrator 支持可插拔的服务注册中心,目前包括 Consul、etcd 和 SkyDNS 2。 您可以将注册器作为容器运行。它将注册您应用程序的每个端口。以下是示例撰写文件:-

  version: '2'
  services:
  registrator:
    image: "$REGISTRYgliderlabs/registrator:latest"
    command: [
      "-ip=<docker-host-ip>",
      "-retry-attempts", "100",
      "-cleanup",
      # "-internal",
      "consul://vconsul:8500"
    ]

官方文档:https://gliderlabs.github.io/registrator/latest/

【讨论】:

我已编辑问题以包含我的 docker-compose.yml 文件。在此,我计划用我的 2 个 Spring Boot 应用程序替换模拟 http 服务器。所以,你告诉我我只需要更改镜像(包括构建),注册器会在容器上线(制作)时自动将它们注册到 consul。在 application.properties 中不需要任何额外的配置,只需指定它将运行的端口就足够了。 你只需要添加注册服务。它将注册您的撰写文件中提供的所有其他服务。它将使用服务名称和服务端口进行注册。所以多个服务可以有相同的图像。你不需要做任何额外的事情,只需在你的撰写文件中添加注册者。 欢迎。如果你觉得这有帮助,请投赞成票:) 另外,在他们的官方网站上,注册器的用法如下:注册器监视新的 Docker 容器并检查它们以确定它们提供的服务。就我们的目的而言,服务是侦听端口的任何东西。 Registrator 在容器上找到的任何服务都将被添加到服务注册中心,例如 Consul 或 etcd。那么,我们是否必须添加注解 @EnableDiscoveryClient 将服务添加到服务发现或自动添加所有服务? 所有服务都会自动添加为注册器监听docker事件。

以上是关于Spring Cloud Consul 和 Consul Clients dockerized的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Consul—git2consul与配置

Spring Cloud Consul

Spring Cloud Consul简介

Spring Cloud Consul 和 Consul Clients dockerized

Spring Cloud Consul—服务发现与Consul

Spring Cloud Consul—服务发现与Consul