标签: netflix-eureka

与netflix Eureka一起使用spring-cloud时,如何让Discovery Client工作?

我正在尝试使用带有netflix插件(如Hystrix,Eureka和Ribbon)的spring cloud创建一个基本项目,以了解其工作原理.我正在尝试制作的项目是一个简单的消息服务器,它将保留消息.一个消息客户端只询问服务器的消息,我想使用自动发现客户端或RestTemplate发现.但我无法上班.

我有以下结构:

  • 消息客户端(尤里卡客户端)
  • 消息服务器(eureka客户端)
  • 配置服务(配置服务器)
  • 发现服务(尤里卡服务器)

我目前所做的是启动配置服务,并在通过以下结构连接时将application.yml详细信息公开给所有这些"apps/clients":

  • 配置服务的\ src \主\资源\设置\ appname.yml
  • app\src\main\resources\bootstrap.yml(包含云配置的appname和url)

这工作正常,我的应用程序启动它们从配置服务器接收的端口,以及它们都连接到我的eureka服务器,并且所有这些都在那里可见.除了Hystrix故障转移也起作用,并不是它与此相关,但它告诉我它不可能完全错误.

但是我的困惑是......在我的客户端模块中的服务类(@Service annotated)中使用@Autowired注释时,我得到了一个discoveryClient对象,但是我无法找到使用该对象的任何其他服务.

消息客户端 - 启动类:

@EnableAutoConfiguration
@EnableHystrix
@EnableEurekaClient
@ComponentScan("cloud.rest.resources, spring.cloud.client")
public class ClientBoot {
    public static void main(String[] args) {
        SpringApplication.run(ClientBoot.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

消息客户端 - REST资源:

@RestController
public class MessageResource {
    @Autowired
    private MessageClient messageClient;
    @RequestMapping(value = "/message/{client}", method = RequestMethod.GET)
    public Message getMessage(@PathVariable String client) {
        return messageClient.getMessage(client);
    }
}
Run Code Online (Sandbox Code Playgroud)

消息客户端 - MessageClient:

@Service
public class RestMessageClient implements MessageClient {
    @Autowired
    private DiscoveryClient discoveryClient; …
Run Code Online (Sandbox Code Playgroud)

java spring spring-cloud netflix-eureka

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

Eureka:如何禁用/配置对等复制?

当我在8761端口上运行Eureka时,一切都很好.配置服务器可以毫无问题地注册到Eureka.然而,当我将eureka端口更改为7001时,事情就会停止工作,我似乎无法弄清楚如何修复它们.

问题似乎围绕着Eureka无法找到运行的对等节点:http:// localhost:8761/eureka.例外是:

2015-07-05 08:00:47.301 ERROR 4140 --- [egister-process] 
c.netflix.eureka.cluster.PeerEurekaNode  : PeerEurekaNode: 
http://localhost:8761/eureka/apps/: CONFIGSERVER/localhost:Register
Run Code Online (Sandbox Code Playgroud)

确实,当Eureka开始时,它说:添加副本节点:http:// localhost:8761/eureka /.因此,似乎假定副本节点在8761运行.

有没有办法禁用Eureka寻找副本节点?或者我如何控制复制品应该发生的时间和地点?我查看了EurekaServerConfig类(http://netflix.github.io/eureka/javadoc/eureka-core/index.html),但我找不到任何朝这个方向发展的内容.

这是Spring Cloud 1.0.2.RELEASE.

spring-boot spring-cloud netflix-eureka

8
推荐指数
1
解决办法
7689
查看次数

如何使用Spring Cloud和Netflix的Eureka注册节点应用程序

我正在努力注册我的节点应用程序,使用Netflix的Eureka,在谷歌搜索后,我仍在寻找解决方案.我能想到的最大值是我们有Prana但是我遇到的问题仍然在Prana问题列表中(我猜这意味着我的REST模板无法发现这个应用程序).

Sidecar,是另一个建议的解决方案,我没有得到任何回应.除了这两个,我找到了一个节点模块Eureka-Node-client,但它们都没有达到我的目的.

node.js spring-cloud netflix-eureka aws-api-gateway

8
推荐指数
1
解决办法
3668
查看次数

从单个主机注册Spring Boot Eureka Client的多个实例

UPDATE

此repo中的README 已更新,以在接受的答案中演示解决方案.


我正在使用基于本指南的Spring Boot Eureka服务注册和发现的简单示例.

如果我启动一个客户端实例,它会正确注册,并且可以通过它看到自己DiscoveryClient.如果我使用不同的名称启动第二个实例,它也可以正常工作.

但是,如果我启动两个具有相同名称的实例,则仪表板仅显示1个正在运行的实例,并且DiscoveryClient仅显示第二个实例.

当我杀死第二个实例时,第一个实例再次通过仪表板和发现客户端可见.

以下是我正在采取的步骤以及我所看到的步骤的更多细节:

尤里卡服务器

启动服务器

cd eureka-server
mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)

访问位于http:// localhost:8761的Eureka仪表板

请注意,尚未注册"实例"

尤里卡客户

启动客户端

cd eureka-client
mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)

直接访问客户端http:// localhost:8080 /

/whoami终端将展示其应用程序名称和端口的客户端的自知之明

{
  "springApplicationName":"eureka-client",
  "serverPort":"8080"
}
Run Code Online (Sandbox Code Playgroud)

/instances端点将需要长达一分钟更新,但最终应显示的所有实例eureka-client已与尤里卡发现客户端注册.

[   
    {
      "host":"hostname",
      "port":8080,
      "serviceId":"EUREKA-CLIENT",
      "uri":"http://hostname:8080",
      "secure":false   
    } 
]
Run Code Online (Sandbox Code Playgroud)

您现在也可以再次访问Eureka dashoboard,并在那里看到它.

使用其他名称启动另一个客户端

您可以通过执行以下操作看到另一个客户端将被注册:

cd eureka-client
mvn spring-boot:run -Dspring.application.name=foo -Dserver.port=8081
Run Code Online (Sandbox Code Playgroud)

/whoami终端将显示名称foo和端口8081.

在一分钟左右,/instances端点也将显示有关此foo …

java spring spring-boot netflix-eureka

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

spring eureka security 批量更新失败,HTTP 状态码为 401

我研究 spring cloud eureka,cloud 并且它们工作得很好。但是在eureka服务中添加了安全性后,却遇到了一些错误。

所有代码和错误细节都在https://github.com/keryhu/eureka-security

eureka 服务 application.yml

security:
  user:
    name: user
    password: password

eureka: 
  client:
    registerWithEureka: false
    fetchRegistry: false
  server:
    wait-time-in-ms-when-sync-empty: 0 
Run Code Online (Sandbox Code Playgroud)

和 config-service application.java

@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
Run Code Online (Sandbox Code Playgroud)

配置服务应用程序.yml

eureka:
  client:
    registry-fetch-interval-seconds: 5
    serviceUrl:
       defaultZone: http://user:password@${domain.name:localhost}:8761/eureka/

spring:  
  cloud:
     config:
       server:
         git:
           uri: https://github.com/spring-cloud-samples/config-repo
           basedir: target/config 
Run Code Online (Sandbox Code Playgroud)

启动config-service后有错误导出:

2016-04-10 11:22:39.402 ERROR 80526 --- [get_localhost-3] c.n.e.cluster.ReplicationTaskProcessor   : Batch update failure with HTTP status code 401; discarding 1 replication tasks
2016-04-10 11:22:39.402  WARN 80526 --- [get_localhost-3] c.n.eureka.util.batcher.TaskExecutors    : Discarding 1 tasks …
Run Code Online (Sandbox Code Playgroud)

spring spring-security spring-cloud netflix-eureka spring-cloud-netflix

8
推荐指数
1
解决办法
4307
查看次数

Eureka在Cloud Foundry/PaaS环境中的价值?

我们正在开发一个部署在Cloud Foundry中的云原生应用程序,在最初"让我们使用Netflix的所有好东西"之后,我们开始质疑与CF的重叠是否合理使用Netflix组件.

尤其是在Eureka的情况下,我们计划将其用于服务发现,但CF和路由提供了非常类似的功能.我们想念的是服务的运行时注册(如果体系结构不经常变化不是一个很大的挑战,实际上是serviceID的一个静态映射 - > CF路由)和心跳(在应用程序级别,因为我假设在容器级别CF确保一切都很好).

所以现在我想知道 - 在使用CF时如何在应用程序(真实应用程序)中使用它?将其保留在架构中有什么好处?

谢谢,

莱谢克

PS.有趣的是,如果eureka存储了serviceID - > CF route的简单映射,那么如果我是对的,Zuul的值也会下降(因为LB将由CF传送,gorouter是一个非常好的选择).

cloud-foundry spring-cloud netflix-eureka

8
推荐指数
1
解决办法
1096
查看次数

Node js app如何注册到Spring eureka?

是否可以将node js app作为spring eureka客户端实现?我使用eureka-js-client注册spring eureka服务器,它总是响应404错误.

spring node.js netflix-eureka

8
推荐指数
2
解决办法
7021
查看次数

spring boot cloud eurka​​ windows 10 eurkea在最新的docker升级后返回host.docker.internal作为客户端主机名

Spring Boot Cloud Disovery 问题,Windows 10 上 docker 升级后 Eureka 主机名的问题。(注意:docker 不托管 spring 服务,只是 mariadb、rabbitmq 和 zipkin)

概括

  • 我正在 Windows 10 企业版上开发,最新补丁
  • 爪哇 8
  • 4
  • docker 托管 mariadb、rabbitmq 和 zipkin(没有服务运行 docker)
  • 使用基于Eureka的spring boot云发现进行服务发现

一切正常,直到今天的 docker 更新,在 docker 升级之后

Eureka 返回“host.docker.internal”作为我的开发箱的主机名(托管 spring boot 云服务的机器)

这一直工作正常,直到今天 Windows 10 上的 docker 升级。

关于这一点的任何指导?

- - - - - - - - - - - - - - - 细节 - - - - - - - - - - ---------

---------------- spring …

spring docker spring-boot netflix-eureka spring-cloud-netflix

8
推荐指数
2
解决办法
4809
查看次数

重启客户端之前,docker-compose无法访问Spring Config服务器

我使用Eureka,Config Server和我的客户端进行了“发现优先”设置。

问题在于这3个服务是按顺序启动的,但是客户端服务器似乎注册得太早,并且永远找不到配置服务器。我尝试了一个第三方库,该库允许等到config-server:8888可用时,但这似乎也不总是起作用。这类似于比赛条件。

The workaround is that if I docker restart the client-server after everything is up, it registers and finds config-server just fine.

First run of docker-compose:

Fetching config from server at : http://localhost:8888
Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available
Run Code Online (Sandbox Code Playgroud)

When I docker restart the client:

Fetching config from server at : http://a80b001d04a7:8888/
Located environment: name=client-server, profiles=[default], label=null, version=053c8e1b14dc0281d5af0349c9b2cf012c1a346f, state=null
Run Code Online (Sandbox Code Playgroud)

Not sure if my JAVA_OPTS properties aren't being set …

spring docker spring-boot netflix-eureka docker-compose

8
推荐指数
1
解决办法
375
查看次数

Eureka First Discovery和配置客户端使用Docker Compose重试

我们有三个Spring Boot应用程序:

  • 尤里卡服务
  • 配置服务器
  • 使用Eureka和Config Server的简单Web服务

我已经设置了服务,以便我们使用Eureka First Discovery,即简单的Web应用程序从eureka服务中找到有关配置服务器的信息.

当单独启动时(在本地或通过将它们作为单独的docker镜像启动)一切正常,即在发现服务运行后启动配置服务器,并在配置服务器运行后启动Simple Web服务.

当docker-compose用于启动服务时,它们显然是在同一时间启动,并且基本上可以竞争启动和运行.这不是问题,因为我们已经添加了failFast:true并重试了简单Web服务的值,并且还重新启动了docker容器,以便在发现服务和配置服务器都是这两个时,最终将重新启动简单的Web服务跑步,但这不觉得最佳.

我们注意到的意外行为如下:

  • 简单的Web服务重新尝试多次连接到发现服务.这是明智的和预期的
  • 同时,简单的Web服务尝试联系配置服务器.因为它无法联系发现服务,所以它会重试连接到localhost上的配置服务器,例如,log show retries将转到http:// localhost:8888.这不是预期的.
  • 简单的Web服务最终将成功连接到发现服务,但是日志显示它仍然尝试通过访问http:// localhost:8888来建立与配置服务器的通信.再次,这不是理想的.

三个问题/意见:

  • 当配置客户端配置为使用发现来查找配置服务器时,配置客户端回退到尝试localhost是一个明智的策略吗?8888?
  • 建立eureka连接时,重试机制现在是否应该切换到尝试Eureka所指示的配置服务器端点?在这种情况下,基本上为更高/更长的重试间隔和配置服务器连接的周期是没有意义的,因为如果它正在查看localhost,它永远不会连接到它,所以我们最好只是快速失败.
  • 是否有任何属性可以覆盖此行为?

我已经创建了一个示例github repo来演示这种行为:

https://github.com/KramKroc/eurekafirstdiscovery/tree/master

spring-boot spring-cloud netflix-eureka docker-compose

7
推荐指数
0
解决办法
1413
查看次数