如何引入Eureka Server
要在项目中引入Eureka Server,请使用group org.springframework.cloud和artifact id spring-cloud-starter-netflix-eureka-server.。有关使用当前的Spring Cloud发布系列设置构建系统的详细信息,请参阅Spring Cloud项目页面。
如何运行Eureka Server
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
服务器有一个带有UI的主页,每个HTTP API端点都符合/ Eureka /*下的正常Eureka功能。
Eureka 背景阅读:see flux capacitor and google group discussion.
高可用性, Zones and Regions
Eureka服务器没有后端存储,但是注册表中的服务实例都必须发送心跳来保持它们的注册是最新的(因此这可以在内存中完成)。客户端还有一个eureka注册的内存缓存(这样他们就不必每次请求服务时都去注册中心)。
默认情况下,每个Eureka服务器也是一个Eureka客户机,并且需要(至少一个)服务URL来定位对等点。如果您不提供它,服务就会运行并工作,但是它会给您的日志带来很多噪音,因为无法向对等方注册。
有Zones and Regions的客户端Ribbon支持的详细信息,请参见下面。
单点模式
这两个缓存(客户端和服务器)和心跳的组合使一个独立的Eureka服务器能够相当灵活地应对失败,只要有某种类型的监视器或弹性运行时让它保持活力(例如云计算)。在独立模式下,您可能更喜欢关闭客户端行为,这样它就不会一直尝试,也不会失败。例子:
application.yml (Standalone Eureka Server).
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
注意,serviceUrl指向与本地实例相同的主机。
对等意识
通过运行多个实例并要求它们相互注册,Eureka可以变得更加灵活和可用。实际上,这是默认行为,所以要使其工作,您所需要做的就是向对等服务器添加一个有效的serviceUrl,例如。
application.yml (Two Peer Aware Eureka Servers).
---
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2/eureka/
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1/eureka/
在本例中,我们有一个YAML文件,可以通过在不同的Spring配置文件中运行它,在两台主机(peer1和peer2)上运行相同的服务器。通过操作/etc/hosts来解析主机名,您可以使用此配置在单个主机上测试对等感知(在生产环境中这样做没有多大价值)。
事实上,eureka实例如果运行在知道自己主机名的机器上(默认情况下使用java.net.InetAddress查找主机名),则不需要主机名。
您可以向系统中添加多个对等点,只要它们彼此都是直接连接的,它们就会在彼此之间同步注册。
application.yml (Three Peer Aware Eureka Servers).
eureka:
client:
serviceUrl:
defaultZone: http://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/
---
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
---
spring:
profiles: peer3
eureka:
instance:
hostname: peer3
更喜欢IP地址
在某些情况下,Eureka更适合公布服务的IP地址,而不是主机名。设置eureka.instance.preferIpAddress为TRUE,当应用程序在eureka注册时,它将使用它的IP地址而不是主机名。
如果Java无法确定主机名,则将IP地址发送给Eureka。
唯一明确的设置主机名的方法是使用eureka.instance.hostname。可以使用环境变量在运行时设置主机名,例如:eureka.instance.hostname=${HOST_NAME}