我正在尝试使用带有netflix插件(如Hystrix,Eureka和Ribbon)的spring cloud创建一个基本项目,以了解其工作原理.我正在尝试制作的项目是一个简单的消息服务器,它将保留消息.一个消息客户端只询问服务器的消息,我想使用自动发现客户端或RestTemplate发现.但我无法上班.
我有以下结构:
我目前所做的是启动配置服务,并在通过以下结构连接时将application.yml详细信息公开给所有这些"apps/clients":
这工作正常,我的应用程序启动它们从配置服务器接收的端口,以及它们都连接到我的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) 当我在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.
我正在努力注册我的节点应用程序,使用Netflix的Eureka,在谷歌搜索后,我仍在寻找解决方案.我能想到的最大值是我们有Prana但是我遇到的问题仍然在Prana的问题列表中(我猜这意味着我的REST模板无法发现这个应用程序).
Sidecar,是另一个建议的解决方案,我没有得到任何回应.除了这两个,我找到了一个节点模块Eureka-Node-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 …
我研究 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
我们正在开发一个部署在Cloud Foundry中的云原生应用程序,在最初"让我们使用Netflix的所有好东西"之后,我们开始质疑与CF的重叠是否合理使用Netflix组件.
尤其是在Eureka的情况下,我们计划将其用于服务发现,但CF和路由提供了非常类似的功能.我们想念的是服务的运行时注册(如果体系结构不经常变化不是一个很大的挑战,实际上是serviceID的一个静态映射 - > CF路由)和心跳(在应用程序级别,因为我假设在容器级别CF确保一切都很好).
所以现在我想知道 - 在使用CF时如何在应用程序(真实应用程序)中使用它?将其保留在架构中有什么好处?
谢谢,
莱谢克
PS.有趣的是,如果eureka存储了serviceID - > CF route的简单映射,那么如果我是对的,Zuul的值也会下降(因为LB将由CF传送,gorouter是一个非常好的选择).
是否可以将node js app作为spring eureka客户端实现?我使用eureka-js-client注册spring eureka服务器,它总是响应404错误.
Spring Boot Cloud Disovery 问题,Windows 10 上 docker 升级后 Eureka 主机名的问题。(注意:docker 不托管 spring 服务,只是 mariadb、rabbitmq 和 zipkin)
概括
一切正常,直到今天的 docker 更新,在 docker 升级之后
Eureka 返回“host.docker.internal”作为我的开发箱的主机名(托管 spring boot 云服务的机器)
这一直工作正常,直到今天 Windows 10 上的 docker 升级。
关于这一点的任何指导?
- - - - - - - - - - - - - - - 细节 - - - - - - - - - - ---------
”
---------------- spring …
spring docker spring-boot netflix-eureka spring-cloud-netflix
我使用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 Boot应用程序:
我已经设置了服务,以便我们使用Eureka First Discovery,即简单的Web应用程序从eureka服务中找到有关配置服务器的信息.
当单独启动时(在本地或通过将它们作为单独的docker镜像启动)一切正常,即在发现服务运行后启动配置服务器,并在配置服务器运行后启动Simple Web服务.
当docker-compose用于启动服务时,它们显然是在同一时间启动,并且基本上可以竞争启动和运行.这不是问题,因为我们已经添加了failFast:true并重试了简单Web服务的值,并且还重新启动了docker容器,以便在发现服务和配置服务器都是这两个时,最终将重新启动简单的Web服务跑步,但这不觉得最佳.
我们注意到的意外行为如下:
三个问题/意见:
我已经创建了一个示例github repo来演示这种行为:
https://github.com/KramKroc/eurekafirstdiscovery/tree/master