gpt4 book ai didi

docker - 如何在 Eureka Discovery 注册中心注册外部服务(非 MSA)

转载 作者:行者123 更新时间:2023-12-02 17:14:43 27 4
gpt4 key购买 nike

我在 Docker 中使用 Kibna。

我正在使用 docker-compose 运行 Kibana

下面是我的 docker-compose.yml

`version: '2'
services:
elasticsearch:
image: elasticsearch
expose:
- 9200
ports:
- "9200:9200"
networks:
- cloud


fluentd:
build: ./fluentd
volumes:
- ./fluentd/conf:/fluentd/etc
links:
- "elasticsearch"
ports:
- "24224:24224"
- "24224:24224/udp"
networks:
- cloud


kibana:
image: kibana
links:
- "elasticsearch"
ports:
- "9201:5601"
networks:
- cloud

networks:
cloud:
driver: bridge`

我想在 Eureka 发现注册表上注册这个 Kibana 应用程序

这样我就可以使用 API 网关调用它

下面是我在 Eureka 上注册我的 API 网关的方式的示例
eureka:
client:
serviceUrl:
defaultZone: http://eureka-server:8761/eureka/
registry-fetch-interval-seconds: 60
instance:
hostname: api-gateway
prefer-ip-address: false
lease-renewal-interval-in-seconds: 5000
lease-expiration-duration-in-seconds: 5000

API-gateway 是一个 spring-boot 应用程序,所以它很简单。

我正在使用 docker (Image) 运行 kibana。我怎样才能做到这一点

任何帮助将是可观的。

提前致谢

最佳答案

向 Eureka 注册一个 java 应用程序并不是什么大问题,因为 Netflix 提供了一个 java Eureka 客户端,在使用 spring-cloud-starter-netflix-eureka-client 时包含在您的类路径中。依赖性。 Spring Boot 将从您的应用程序属性配置此客户端。

从应用程序代码外部注册和应用程序是不同的情况。你当然仍然可以这样做。

我将在这里只提一点理论,然后给出建议的解决方案。

理论

执行此操作的基本方法是使用 Eureka REST operations .这是一个 API,您可以在其中手动注册/取消注册服务实例,并为 Eureka 提供定期心跳以考虑可用的服务实例。

它确实不是一个非常大的 API,并且根据您目前对 Eureka 客户端配置的了解,您可能会很轻松。

使用 spring-cloud-netflix-sidecar 的解决方案

Spring Cloud 已经涵盖了您的用例!这里的方法是您将为 kibana 创建一个配套容器,一个边车。而这个容器中的应用程序将负责向 Euerka 注册您的服务。这种类型的应用程序非常小,用 Java 和 Spring Cloud 实现会很快。

这是 Spring Cloud 的文档:Polyglot support with Sidecar

这是关于它的教程:Spring Cloud Netflix Sidecar Tutorial

这是一个以非常简单的方式执行此操作的存储库:Spring-Cloud-Sidecar_Tutorial

sidecar应用中几乎没有代码,只有这个应用类(取自上面的存储库):

package com.craftcodecrew.lumen.service.sidecar;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.sidecar.EnableSidecar;

@SpringBootApplication
@EnableSidecar
public class LumenServiceSidecarApplication {

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

这个配置:

server:
port: 5678

spring:
application:
name: lumen-service

eureka:
client:
serviceUrl:
defaultZone: ${EUREKA_URI:http://localhost:8761/eureka}
instance:
preferIpAddress: true

sidecar:
port: ${SIDECAR_PORT:8000}
health-uri: ${SIDECAR_HEALTH_URI:http://localhost:8000/health}
home-page-uri: ${SIDECAR_HOMEPAGE_URI:http://localhost:8000/}

还有一个非常简单的 pom.xml .

如您所见,sidecar 库需要一些您需要指向 kibana 实例的配置。所以,他们需要在同一个网络上。并且与 Eureka 位于同一网络上。

假设您的 kibana 容器名称是“kibana”,您的配置将如下所示:

server:
port: 5678

spring:
application:
name: kibana

eureka:
client:
serviceUrl:
defaultZone: ${EUREKA_URI:http://eureka:8761/eureka}
instance:
preferIpAddress: true

sidecar:
port: ${SIDECAR_PORT:5601}
health-uri: ${SIDECAR_HEALTH_URI:http://kibana:5601/status}
home-page-uri: ${SIDECAR_HOMEPAGE_URI:http://kibana:5601/}

您还可以在 docker-compose 定义中配置的环境变量中控制这些值。像这样:

  kibana-sidecar:
image: kibana-sidecar
links:
- "kibana"
ports:
- "5678:5678"
environment:
- EUREKA_URI=<your_eureka_instance_uri>
- SIDECAR_PORT=5601
- SIDECAR_HEALTH_URI=http://kibana:5601/status
- SIDECAR_HOMEPAGE_URI=http://kibana:5601/
networks:
- cloud

关于docker - 如何在 Eureka Discovery 注册中心注册外部服务(非 MSA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com