标签: netflix-eureka

EnableEurekaClient和EnableDiscoveryClient有什么区别?

在某些应用程序中,我看到人们正在使用EnableEurekaClient.其他一些示例应用程序正在使用EnableDiscoveryClient.

这两者有什么区别吗?

spring-cloud netflix-eureka

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

了解Spring Cloud Eureka Server自我保护和更新阈值

我是开发微服务的新手,虽然我已经研究了一段时间,阅读了Spring的文档和Netflix.

我已经在Github上开始了一个简单的项目.它基本上是Eureka服务器(阿基米德)和三个Eureka客户端微服务(一个公共API和两个私有).查看github的自述文件以获取详细说明.

关键是当一切都在运行时,我希望如果其中一个私有微服务被杀死,Eureka服务器会实现并从注册表中删除它.

在Stackoverflow上发现了这个问题,解决方案通过enableSelfPreservation:false在Eureka Server配置中使用.一段时间后执行此操作,被杀死的服务会按预期消失.

但是我可以看到以下消息:

自保护模式已关闭.在网络/其他问题的情况下,可能无法保护实例.

1.自我保护的目的是什么?该文件指出,对"客户端进行自我保护可以获得不再存在的实例".那么什么时候打开/关闭它是否明智?

此外,启用自我保护后,您可能会在Eureka Server控制台警告中收到一条未完成的消息:

紧急!当EUREKA不是时,EUREKA可能会不正当地提出申请.更新的数量超过了阈值,并且这些实际情况并未到期,只是为了安全起见.

现在,继续使用Spring Eureka控制台.

Lease expiration enabled    true/false
Renews threshold    5
Renews (last min)   4
Run Code Online (Sandbox Code Playgroud)

我遇到了一个奇怪的阈值计数行为:当我单独启动Eureka Server时,阈值为1.

2.我有一个Eureka服务器并配置registerWithEureka: false为防止它在另一台服务器上注册.那么,为什么它会显示在阈值计数中?

3.对于每个客户端,我开始阈值计数增加+2.我想这是因为他们每分钟发送2条续订消息,对不对?

4. Eureka服务器永远不会发送续订,因此最后一次更新时间始终低于阈值.这是正常的吗?

renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
Run Code Online (Sandbox Code Playgroud)

服务器cfg:

server:
  port: ${PORT:8761}

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enableSelfPreservation: false
#   waitTimeInMsWhenSyncEmpty: 0 …
Run Code Online (Sandbox Code Playgroud)

spring spring-cloud netflix-eureka

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

什么是Eureka服务,Eureka客户端,Eureka实例和Eureka服务器

我正在通过阅读本文学习Spring cloud Netflix ,但是我开始对本文中的不同术语感到困惑,它们是:

  1. 尤里卡服务.据我所知,这是一个普通的服务(特别是微服务),运行在一个独特的uri(即每个uri的一个服务).说localhost:12000.它可以在Eureka服务器中注册.

  2. 尤里卡客户.与尤里卡服务相同???

  3. 尤里卡服务器.据我所知,我们可以检查,发现和管理我们构建的一系列微服务,通常运行的是服务器localhost:8761

  4. 尤里卡实例.我对它所指的是什么感到困惑,与Eureka客户一样?

在本文中,它eureka.client在配置和EurekaClientNetflix API中提到,它们是指同一件事吗?

如果我错了,请告诉我这四个术语是什么意思并纠正我.谢谢!

================================== UPDATE =============== ===================

在文章中它说:

@EnableEurekaClient 使应用程序成为Eureka"实例"(即它注册自己)和"客户端"(即它可以查询注册表以查找其他服务).

因此看起来Eureka实例与Eureka服务相同.虽然Eureka Client是一个可以查询其他实例/服务的特殊实例.

spring spring-cloud netflix-eureka

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

尤里卡从不注销服务

我目前正面临一个问题,即Eureka没有取消注册注册服务.我直接从git hub中取出了Eureka服务器示例,只进行了一次更改eureka.enableSelfPreservation = false.我的application.yml看起来像这样:

server:
  port: 8761
eureka:
  enableSelfPreservation: false
  client:
    registerWithEureka: false
fetchRegistry: false
  server:
    waitTimeInMsWhenSyncEmpty: 0
Run Code Online (Sandbox Code Playgroud)

我已经读过,如果85%的注册服务在15分钟内停止提供心跳,Eureka认为该问题与网络有关,并且不会取消注册没有响应的服务.在我的情况下,我只运行一个服务,所以我禁用了自我保护模式.我突然杀了这个过程,尤里卡离开了服务注册的时间似乎是无限期的.

我的客户的application.yml看起来像这样:

eureka:
  instance:
    leaseRenewalIntervalInSeconds: 3
  client:
    healthcheck:
      enabled: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  appInfo:
    replicate:
      interval: 3
    initial:
      replicate:
        time: 3
spring:
  rabbitmq:
    addresses: ${vcap.services.${PREFIX:}rabbitmq.credentials.uri:amqp://${RABBITMQ_HOST:localhost}:${RABBITMQ_PORT:5672}}
Run Code Online (Sandbox Code Playgroud)

我的目标是创建一个演示,其中Eureka快速检测到服务不再运行,另一个启动的服务可以快速注册.

截至目前,一旦eureka客户端启动,它将在3秒内注册.当服务突然终止时,它永远不会取消注册.在我终止服务后,Eureka仪表板显示:

紧急!当EUREKA不是时,EUREKA可能会不正当地提出申请.更新的数量超过了阈值,并且这些实际情况并未到期,只是为了安全起见.

我该如何防止这种行为?

spring-cloud netflix-eureka

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

如何在Spring Cloud中从客户端配置多个Eureka服务器

从spring doc,我看到我们可以将peer eureka服务器放在一起,所以对于Eureka1,在application.yml中,我可以:

spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2/eureka/
Run Code Online (Sandbox Code Playgroud)

在Eureka Server 2中,我可以:

spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/
Run Code Online (Sandbox Code Playgroud)

现在这两个eureka服务器互相认识,这很好.但是,现在在配置客户端时,当他们再次注册Eureka时,该怎么做?

在我的客户端应用程序中,我有:

eureka:
      instance:
        hostname: ${host.instance.name:localhost}
        nonSecurePort: ${host.instance.port:8080}
        leaseRenewalIntervalInSeconds: 5 #default is 30, recommended to keep default
        metadataMap:
          instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
      client:
        serviceUrl:
          defaultZone: http://(eurekaServerHost):8761/eureka/

    server:
      port: ${host.instance.port:8080}
Run Code Online (Sandbox Code Playgroud)

所以现在我的问题是我应该在客户端application.yml中使用peer1或peer2作为EurekaServerHost吗?

谢谢

spring-cloud netflix-eureka

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

尤里卡和Kubernetes

我正在整理一个概念证明,以帮助使用Spring Boot/Netflix OSS和Kubernetes一起识别陷阱.这也是为了证明Prometheus和Graphana等相关技术.

我有一个Eureka服务设置,在我的Kubernetes clouster中没有任何问题.这被命名为discovery,并在使用K8添加到K8时被命名为"discovery-1551420162-iyz2c"

kubectl run discovery --image=xyz/discovery-microservice --replicas=1 --port=8761

对于我的配置服务器,我正在尝试使用基于逻辑URL的Eureka,所以在我的bootstrap.yml中

server:
  port: 8889

eureka:
  instance:
    hostname: configserver
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://discovery:8761/eureka/

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xyz/microservice-config
Run Code Online (Sandbox Code Playgroud)

我正在开始使用它

kubectl run configserver --image=xyz/config-microservice --replicas=1 --port=8889
Run Code Online (Sandbox Code Playgroud)

该服务最终运行命名为configserver-3481062421-tmv4d.然后我在配置服务器日志中看到异常,因为它试图找到eureka实例而不能.

我有相同的设置使用docker-compose本地链接,它启动各种容器没有任何问题.

discovery:
  image: xyz/discovery-microservice
  ports:
   - "8761:8761"
configserver:
  image: xyz/config-microservice
  ports:
   - "8888:8888"
  links:
   - discovery
Run Code Online (Sandbox Code Playgroud)

我怎么能设置像eureka.client.serviceUri这样的东西,这样我的微服务可以在不知道K8集群内的固定IP地址的情况下定位他们的同行?

spring-boot kubernetes microservices netflix-eureka spring-cloud-netflix

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

Eureka Server:如何实现高可用性

我是春天的新手.我已阅读此文档,它说客户端应用程序必须指定服务URL:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
Run Code Online (Sandbox Code Playgroud)

但是如果localhost:8761下降怎么办?

spring-cloud netflix-eureka

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

Zookeeper vs Eureka对微服务的作用是什么?

我将在我的应用程序中实现一组微服务的编排.两个广泛使用的工具我发现与Apache Zookeeper和Netflix Eureka相比.

任何人都可以根据基本差异给我一个比较,这两项服务有哪些?

还有其他强大的工具吗?

architecture orchestration microservices netflix-eureka apache-zookeeper

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

如何使用spring-cloud-netflix和feign编写集成测试

我使用Spring-Cloud-Netflix进行微服务之间的通信.假设我有两个服务,Foo和Bar,而Foo使用Bar的REST端点之一.我使用一个带注释的接口@FeignClient:

@FeignClient
public interface BarClient {
  @RequestMapping(value = "/some/url", method = "POST")
  void bazzle(@RequestBody BazzleRequest);
}
Run Code Online (Sandbox Code Playgroud)

然后我SomeService在Foo中有一个服务类,它调用了BarClient.

@Component
public class SomeService {
    @Autowired
    BarClient barClient;

    public String doSomething() {
      try {
        barClient.bazzle(new BazzleRequest(...));
        return "so bazzle my eyes dazzle";
      } catch(FeignException e) {
        return "Not bazzle today!";
      }

    }
}
Run Code Online (Sandbox Code Playgroud)

现在,为了确保服务之间的通信正常工作,我想构建一个测试,使用WireMock之类的东西,对一个假的Bar服务器发出真正的HTTP请求.测试应确保假设正确解码服务响应并报告SomeService.

public class SomeServiceIntegrationTest {

    @Autowired SomeService someService;

    @Test
    public void shouldSucceed() {
      stubFor(get(urlEqualTo("/some/url"))
        .willReturn(aResponse()
            .withStatus(204);

      String result = someService.doSomething();

      assertThat(result, is("so …
Run Code Online (Sandbox Code Playgroud)

java wiremock netflix-eureka feign spring-cloud-netflix

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

如何使用Spring Cloud和Netflix OSS在微服务之间进行路由

在我们使用Spring Cloud开发微服务的过程中,我们开始使用Zuul作为从外部到微服务的任何连接的代理,以及任何需要联系其他微服务的微服务.

一段时间后,我们得出结论,Zuul被设计为边缘服务(仅从外部到微服务的代理流量),不应该用于跨微服务通信.特别是Spring Cloud建议使用eureka与另一个服务建立直接(可能是负载平衡)连接的方式使我们反对在所有事件之间使用Zuul.

当然,一切都按预期工作得很好(就像Spring云一样),但我们对如何使用此设置执行某个用例毫无头绪.

在部署新版本的微服务时,我们希望对旧版本和新版本进行蓝/绿部署.但是,在微服务之间没有Zuul,两个单独服务之间的通信将继续使用旧版本,直到从eureka中删除.

我们正在考虑如何实现这一目标.在下面的图片中,我画了我认为可能是一个选项.

在图片的第一部分,Zuul打电话给eureka来获取注册表来创建路线.服务1还调用eureka以使注册表路由到服务2.由于服务2在eureka注册表中,因此路由成功完成.

在图的第二部分中,部署了服务2(服务2.1)的更新.它也注册了eureka,这使得服务1现在可以路由到服务2和服务2.1.蓝/绿部署不需要这样做.

在第三部分中,展示了针对此问题的另一个eureka实例的潜在解决方案.此实例不支持对等,不会与第一个eureka实例同步.与第一个实例相反,这个唯一的目的是促进蓝色/绿色部署.服务2.1向第二个eureka实例注册,服务1将其配置更改为从第一个尤其是第二个eureka实例获取其注册表.

在此输入图像描述

我们面临的主要问题是这是否是一个可行的解决方案.具有Zuul路由的灵活性是我们在这种情况下没有的一大优点.我们应该回过头来通过Zuul路由每个服务到服务的呼叫,还是有另一个解决方案(可能是某种类型的功能区配置)更合适?或者第二个eureka实例是此类部署的最佳解决方案?

任何反馈将不胜感激.

亲切的问候,安德烈亚斯

blue-green-deployment microservices spring-cloud netflix-eureka netflix-zuul

19
推荐指数
1
解决办法
3215
查看次数