标签: netflix-eureka

尽管有随机的Docker容器外部端口,但使用Eureka

我正在编写一个应用程序,它由一些基于弹簧启动的微服务组成,前面有一个基于zuul的反向代理 -

当我在我的机器上启动服务时,它可以工作,但是对于服务器的推出,我想使用docker作为服务,但现在似乎不可能.

通常,您将在容器外部具有固定的"内部"端口和随机端口.但容器中的应用程序不知道外部端口(和IP).

Netflix工具符合我想要编写的高效微服务架构,概念上我非常喜欢docker.据我所知,启动容器会非常麻烦,在主机上收集外部端口并将其传递给应用程序,因为在应用程序启动后您无法简单地更改端口.

有没有办法使用eureka与基于docker的客户端?

[更新]我想我解释这个问题做得不好.所以也许这可以澄清一点:

eureka服务器本身可以在docker中运行,因为我只有一个,外部端口无关紧要.我可以使用链接功能从客户端访问它.

问题是客户端注册自己的URL.这是例如https:// localhost:8080 /但由于动态端口分配,它实际上只能通过https:// localhost:54321 /访问

因此,eureka将返回错误的服务URL.

更新 我已在下面更新了我的答案,所以看看那里.

docker spring-boot netflix-eureka netflix-zuul

17
推荐指数
1
解决办法
3867
查看次数

Spring Cloud:Zuul的Canary部署

我正在使用Eureka和Zuul开始使用Spring Cloud,并且在构建蓝色/绿色和Canary部署方面遇到了一些问题.到目前为止,我已经完成了基础工作,并让Eureka,Zuul和配置服务器按预期工作.我想要完成的是建立一个有两个版本的服务,比如1.0和1.1.对于特定用户的子集,我想将它们路由到1.1版本,其他人都应该转到1.0版本.

Zuul过滤器API对文档有点了解,我正在努力解决一些概念,所以我想我会在这里问几个问题.我还运行了一些基本的过滤器,除了获取他们请求的主体和服务的身份之外,它不会做很多事情.我在墙上的位置是了解如何向Eureka和Zuul公开同一服务的两个不同版本.我很好奇的一些事情:

  • 在文档,帖子和其他堆栈溢出之间,术语"服务"和"集群"似乎可以互换使用.它是否正确?
  • 如果我有一个名为的服务/simpleservice,我会暴露两个不同的serviceIDs(即simpleservicesimpleservice-1.1)?如果我这样做,当其中一个目标用户请求时/simpleservice,我让Zuul发送给他们/simpleservice-1.1
  • 或者,您是否将另一个节点添加到现有服务ID并向每个节点添加其他元数据,以便Zuul区分版本1.0和1.1?
  • 答案是"以上所有吗?" :)

canary-deployment microservices spring-cloud netflix-eureka netflix-zuul

16
推荐指数
1
解决办法
2923
查看次数

eureka发现客户端 - 选择性禁用

有没有办法根据弹簧配置文件禁用spring-boot eureka客户端注册?

目前我使用以下注释:

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@EnableConfigServer

public class ConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要的是一个条件如(借用伪代码)

@if (Profile!="development")
@EnableDiscoveryClient
@endif
Run Code Online (Sandbox Code Playgroud)

或者在应用程序属性文件中的某种方式.我已经尝试将application.yml文件设置为:

spring:
  profiles: development
  cloud:
    discovery:
      enabled: false
Run Code Online (Sandbox Code Playgroud)

但这没效果.

spring spring-boot netflix-eureka

16
推荐指数
6
解决办法
3万
查看次数

Zuul Edge Server可以在没有Eureka/Ribbon的情况下使用

我们有一个基础设施,包括服务发现和负载平衡(即服务器端与STM和weblogic集群).现在我们正在重构为微服务.我们需要一个API网关,它可以对其他微服务进行基本路由.Netflix Zuul看起来很不错,但是如果没有Eureka我就无法让Zuul工作 - 但我们不需要Eureka,因为我们已经有了服务发现和负载平衡.

  1. 是否可以在没有Eureka和Ribbon的情况下使用Zuul?
  2. 如果是,请提供一些公会行,因为在维基中没有提及.

谢谢.

netflix spring-cloud netflix-eureka netflix-zuul

15
推荐指数
1
解决办法
6760
查看次数

如何在使用@ConditionalOnProperty或@ConditionalOnExpression时检查两个条件

在创建bean时,我需要检查YAML属性文件是否满足两个条件.我该怎么做,因为@ConditionalOnProperty注释只支持一个属性?

spring-boot netflix-eureka spring-cloud-netflix

15
推荐指数
4
解决办法
2万
查看次数

我应该如何在EC2实例中包含的Docker中使用Netflix Zuul和Eureka配置Spring Cloud

我正在使用Spring Boot和Spring Cloud(Zuul和Eureka)在单独的docker容器中运行构建微服务,这些容器部署在单独的Amazon EC2实例中.

我有一个简单的REST服务,它向Eureka注册,并已配置Zuul通过在Eureka中查找请求来将请求路由到此服务. 在此输入图像描述

我可以使用boot2docker在Mac上本地运行(即不在Amazon/EC2中),但是当部署在EC2上时,Zuul无法找到服务,并报告"转发错误"(状态500).

在EC2中,一切都配置为在端口80上运行(只是在评估时,我可以通过我们的防火墙轻松访问).我可以在Eureka系统状态页面中看到Zuul和我的服务(尽管没有链接可用!).

客户端配置为使用完整的AWS域名查找Eureka,因此我可以看到他们如何找到Eureka OK.例如

  client:
    serviceUrl:
      defaultZone: http://ec2-XX-XX-XX-XX.ap-southeast-2.compute.amazonaws.com:80/eureka/,http://ec2-YY-YY-YY-YY.ap-southeast-2.compute.amazonaws.com:80/eureka/
Run Code Online (Sandbox Code Playgroud)

但是,客户似乎正在使用其内部docker IP地址进行注册(基于Eureka系统状态链接).

在此输入图像描述

edgeserver链接指向http://172.17.0.2/info 试用服务链接指向http://172.17.0.3/info

我猜这是不正确的,其他EC2实例不知道到达这个地址.

我已经阅读了这个页面https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud,建议使用AWS EC2弹性IP地址,但我希望我不必这样做.

我也看到目前有关于这个主题的讨论,https://github.com/spring-cloud/spring-cloud-netflix/issues/432

有没有人设法让这种类型的设置工作,如果是这样,他们是如何配置Eureka属性的?

spring amazon-web-services spring-cloud netflix-eureka

14
推荐指数
1
解决办法
1万
查看次数

EnableEurekaClient导入不存在

我在我的项目中添加了 spring-cloud-starter-netflix-eureka-client gradle 依赖项并取消了依赖项。但是,当在我的主类中使用 @EnableEurekaClient 时,它会向我显示建议创建 @EnableEurekaClient 注释。不显示eureka客户端的任何导入文件。

Unresolved reference: EnableEurekaClient
Run Code Online (Sandbox Code Playgroud)

产品服务应用程序.kt

  package com.main.productservice
    
    import org.springframework.boot.autoconfigure.SpringBootApplication
    import org.springframework.boot.runApplication
    
    @SpringBootApplication
    @EnableEurekaClient
    class ProductServiceApplication
    
    fun main(args: Array<String>) {
        runApplication<ProductServiceApplication>(*args)
    }
Run Code Online (Sandbox Code Playgroud)

gradle.kt

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.5.2"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.5.20"
    kotlin("plugin.spring") version "1.5.20"
}

group = "com.main"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.

    kotlin:kotlin-reflect")
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
        implementation("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client")
        testImplementation("org.springframework.boot:spring-boot-starter-test")
    }
    
    tasks.withType<KotlinCompile> {
        kotlinOptions {
            freeCompilerArgs = listOf("-Xjsr305=strict")
            jvmTarget = "11" …
Run Code Online (Sandbox Code Playgroud)

kotlin spring-boot spring-cloud netflix-eureka spring-cloud-netflix

14
推荐指数
3
解决办法
2万
查看次数

Eureka客户在码头工人的容器中

我有一个eureka服务器和两个在docker容器中运行的休息服务(eureka客户端).如果第一个服务尝试访问第二个服务,我会收到UnknownHostException.原因是服务在eureka服务器上注册了dns服务器无法解析的容器主机名.

我认为解决方案可能是设置docker容器的主机名.所以我使用了带-h标志的docker来设置主机名: docker run -h project-dev.net9.mycompany.com

但现在服务甚至无法在eureka服务器上注册.我得到这个例外:

 2015-11-30 12:03:42.182 ERROR 1 --- [pool-2-thread-1]    com.netflix.discovery.DiscoveryClient    : Can't get a response from http://project-dev.net9.mycompany.com:8761/eureka/apps/MY-SERVICE/project-dev.net9.mycompany.com
     Can't contact any eureka nodes - possibly a security group issue?

 com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused
    at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:184)
    at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:120)
    at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:28)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680)
    at com.sun.jersey.api.client.WebResource.put(WebResource.java:211)
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1097)
    at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1060)
    at com.netflix.discovery.DiscoveryClient.access$500(DiscoveryClient.java:105)
    at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1583)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) …
Run Code Online (Sandbox Code Playgroud)

java rest docker netflix-eureka

13
推荐指数
1
解决办法
2258
查看次数

如何消除 Eureka Dashboard 上的“Eureka 可能错误地声称实例已启动,但当它们未启动时”警告?

如何消除尤里卡服务器仪表板上的以下消息?它会不会对我的服务造成任何问题?

紧急情况!EUREKA 可能不正确地声称实例已启动,但实际上并非如此。续订少于阈值,因此实例不会仅仅为了安全而过期。

尤里卡仪表板

谢谢。

java spring spring-cloud netflix-eureka spring-cloud-netflix

13
推荐指数
2
解决办法
1万
查看次数

如何在Eureka Discovery注册表上注册外部服务(非MSA)

我在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`
Run Code Online (Sandbox Code Playgroud)

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

所以我可以使用API​​网关来调用它

以下示例是我在Eureka上注册My API-gateway的方式

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网关是一个spring-boot应用程序,所以它很简单.

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

任何帮助都会很明显.

提前致谢

docker kibana microservices netflix-eureka docker-compose

13
推荐指数
1
解决办法
388
查看次数