Eureka提供了两个组件——Eureka客户端和Eureka服务器。使用Eureka的体系结构通常有两个应用程序
- Application Client 它使用Eureka客户端向应用程序服务发出请求。
- Application Service 它接收来自应用程序客户端的请求并发回响应。
设置包括以下内容
- Eureka Server
- Eureka Client for the application client
- Eureka Client for the application service
Eureka可以在AWS和非AWS环境中运行。
如果在云环境中运行,则需要传入java命令行属性-Deureka.datacenter=cloud,以便Eureka客户端/服务器知道初始化AWS云的特定信息。
配置Eureka Client
Prerequisites
- JDK 1.8 or higher
您可以选择以下方法来获得Eureka客户端二进制文件。总是尝试获得最新的版本,因为有更多的补丁。
- 您可以使用此URL下载Eureka客户机二进制文件 "http://search.maven.org/#search%7Cga%7C1%7Ceureka-client"
- 您可以将eureka客户机作为maven依赖项添加
<dependency>
<groupId>com.netflix.eureka</groupId>
<artifactId>eureka-client</artifactId>
<version>1.1.16</version>
</dependency>
- 您可以按照这里指定的方式构建客户机。
Configuration
配置Eureka客户端最简单的方法是使用属性文件。默认情况下,Eureka客户机搜索属性文件Eureka -client。类路径中的属性。它进一步在特定于环境的属性文件中搜索特定于环境的重写。环境通常是测试或prod,由-Deureka提供。环境java命令行切换到eureka客户机(没有.properties后缀)。相应地,客户机还搜索eureka-client-{test,prod}.properties。
您可以查看Eureka配置的缺省配置示例。您可以复制这些配置并根据需要进行编辑,并将它们放在类路径中。如果出于某种原因希望更改属性文件的名称,可以指定在java命令行开关中,-Deureka.client.props=(没有后缀),其中是要搜索的属性文件的名称。
文件中的属性解释了它们的用途。至少需要配置以下内容:
Application Name (eureka.name)
Application Port (eureka.port)
Virtual HostName (eureka.vipAddress)
Eureka Service Urls (eureka.serviceUrls)
对于更高级的配置,请查看以下链接中的选项。
配置Eureka Server
先决条件
- JDK 1.8 or higher
- Tomcat 6.0.10 or higher
使用Eureka服务器,您可以选择以下方法来获取二进制文件:
- 您可以从这里指定的源文件构建WAR归档文件。
- 您可以使用这个URL从mavencentral下载WAR归档文件"http://search.maven.org/#search%7Cga%7C1%7Ceureka-server"
Configuration
配置Eureka服务器最简单的方法是使用与上面的Eureka客户机类似的属性文件。首先,按照上面指定的方式配置与服务器一起运行的Eureka客户机。Eureka服务器本身会启动一个Eureka客户机,该客户机用于查找其他Eureka服务器。因此,您需要首先为Eureka服务器配置Eureka客户机,就像您对连接到Eureka服务的任何其他客户机所做的那样。Eureka服务器将使用其Eureka客户端配置来标识具有相同名称(即Eureka .name)的对等Eureka服务器。
配置完Eureka客户机之后,如果您在AWS中运行,可能需要配置Eureka服务器。Eureka服务器默认搜索属性文件Eureka -server。类路径中的属性。它进一步在特定于环境的属性文件中搜索特定于环境的重写。环境通常是测试或prod,由-Deureka提供。环境java命令行切换到eureka服务器(没有.properties后缀)。因此,服务器还搜索eureka-server-{test,prod}.properties。
为本地开发进行配置
当运行eureka服务器进行本地开发时,通常需要等待大约3分钟才能启动。这是由于默认的服务器行为,搜索要同步的对等点,并在发现没有可用的对等点时重试。可以通过设置属性来减少这个等待时间:
eureka.numberRegistrySyncRetries=0
Configuring for AWS
如果您在AWS中运行(如本文所述),则需要其他配置。有关更高级的服务器配置,请参阅EurekaServerConfig.java提供的选项。
如果您正在构建WAR归档文件,您可以就地编辑eureka-server/conf下的文件,并且在创建归档文件之前,构建将负责将属性文件放置在WEB-INF/classes下。
如果您从maven下载归档文件,那么您可以在WEB-INF/classes下合并已编辑的属性文件。
运行演示应用程序可以帮助您更好地理解配置。
- Eureka服务器有两组配置:Eureka客户端配置如上所述。
- Eureka Server configuration.
Client/Server版本兼容性
我们为eureka使用语义版本控制,并将在小型版本升级(即1)之间维持客户机/服务器协议兼容性。x版本应该具有客户端和服务器部署之间的兼容协议)。通常,服务器在更新的版本上总是比客户端更安全。
EurekaInstanceConfig配置
String getInstanceId(); 获取要向eureka注册的这个实例的惟一Id(在appName范围内)。
String getAppname();获取要在eureka注册的应用程序的名称。
String getAppGroupName();获取要在eureka注册的应用程序组的名称。
boolean isInstanceEnabledOnit();指示实例是否应在向eureka注册后立即启用以获取流量。有时,应用程序可能需要在准备接受流量之前进行一些预处理。
int getNonSecurePort();获取<code>non-secure</code>端口,实例应该在该端口上接收通信。
int getSecurePort();获取实例应该在其上接收通信的<code>Secure port</code> >。
boolean isNonSecurePortEnabled();指示<code>非安全</code>端口是否应启用流量。
boolean getSecurePortEnabled();指示是否为流量启用<code>secure</code>端口。
int getLeaseRenewalIntervalInSeconds();指示eureka客户端需要多长时间(以秒为单位)将心跳发送到eureka服务器,以指示它仍然活动。如果在{@link #getLeaseExpirationDurationInSeconds()}中指定的时间段内没有接收到心跳,eureka服务器将从其视图中删除该实例,方法是不允许对该实例进行通信。注意,如果实例实现了{@link HealthCheckCallback},然后决定使自己不可用,那么它仍然不能接受流量。
int getLeaseExpirationDurationInSeconds();指示eureka服务器在接收到最后一次心跳后等待的时间(以秒为单位),然后才能从视图中删除该实例,并通过不允许对该实例进行通信来从视图中删除该实例。设置这个值太长可能意味着即使实例不是活动的,也可以将流量路由到该实例。将该值设置得太小可能意味着,由于临时网络故障,实例可能会退出流量。该值至少要高于{@link #getLeaseRenewalIntervalInSeconds()中指定的值。
String getVirtualHostName();获取为此实例定义的虚拟主机名。这通常是其他实例通过使用虚拟主机名找到此实例的方式。可以将此看作类似于完全限定的域名,您的服务的用户将需要找到此实例。
String getSecureVirtualHostName();这通常是其他实例通过使用安全虚拟主机名找到此实例的方式。可以将此看作类似于完全限定的域名,您的服务的用户将需要找到此实例。
String getASGName();获取与此实例关联的<code>AWS自动伸缩组名</code>。此信息专门用于AWS环境中,用于在实例启动后自动使实例停止服务,该实例已禁用通信。
String getHostName(boolean refresh);获取与此实例关联的主机名。这正是其他实例用于调用的名称。
Map<String, String> getMetadataMap();获取与此实例关联的元数据名称/值对。此信息被发送到eureka服务器,并可由其他实例使用。
DataCenterInfo getDataCenterInfo();返回部署此实例的数据中心。如果实例部署在AWS中,则此信息用于获取一些AWS特定的实例信息。
String getIpAddress();获取实例的IPAdress。此信息仅用于学术目的,因为来自其他实例的通信主要是使用{@link #getHostName(boolean)}中提供的信息进行的。
String getStatusPageUrlPath();获取此实例的相对状态页{@link java.net.URL} <em>Path</em>。然后根据{@link #getSecurePort()}和{@link #getNonSecurePort()}中指定的通信类型(安全或不安全)构造状态页URL。它通常用于其他服务的信息目的,以查找此实例的状态。用户可以提供一个简单的<code>HTML</code>,它指示实例的当前状态。
String getStatusPageUrl();获取此实例的绝对状态页{@link java.net.URL}。如果状态页位于与eureka对话的同一个实例中,那么用户可以提供{@link #getStatusPageUrlPath()},否则在实例是其他服务器的代理的情况下,用户可以提供完整的{@link java.net.URL}。如果提供了完整的{@link java.net.URL},则优先。它通常用于其他服务的信息目的,以查找此实例的状态。用户可以提供一个简单的<code>HTML</code>,它指示实例的当前状态。完整的{@link java.net.URL}应该遵循这种格式:
http://${eureka.hostname}:7001/,其中值${eureka.hostname} 在运行时被替换。
String getHomePageUrlPath();设置此实例的相对主页{@link java.net.URL}路径。然后根据{@link #getSecurePort()}和{@link #getNonSecurePort()}中指定的通信类型(安全或不安全)构造主页URL。它通常用于其他服务的信息目的,以便将其用作登录页。
String getHomePageUrl();
String getHealthCheckUrlPath();获取此实例的相对健康检查{@link java.net.URL} <em>Path</em>。然后根据{@link #getSecurePort()}和{@link #getNonSecurePort()}中指定的通信类型(安全或不安全)构造健康检查页面URL。它通常用于根据实例的健康状况做出有根据的决策——例如,它可以用于确定是继续部署到整个集群,还是停止部署,而不会造成进一步的损害。
String getHealthCheckUrl();
String getSecureHealthCheckUrl();
String getNamespace();
private boolean preferIpAddress = false;注意,在猜测主机名时,服务器的IP地址应该与操作系统报告的主机名相对应。