Eureka扩展使用
Eureka Rest API
服务注册中心(Eureka Server)除了提供服务提供者(Eureka Client)进行服务注册外,同时提供了REST API,允许非Java语言的其它应用服务通过HTTP REST的方式接入到Eureka的服务发现中。
操作 | http动作 | 描述 |
注册服务实例 | POST /eureka/apps/{applicationName} | 输入xml或json格式body,注册成功返回204 |
注销服务实例 | DELETE /eureka/apps/{applicationName}/{instanceId} | 注销服务成功返回200 |
服务实例发送心跳 | PUT /eureka/apps/{applicationName}/{instanceId} | 成功返回200,instanceId不存在返回404 |
查询所有服务实例 | GET /eureka/apps | 成功返回200,输出xml或json格式响应 |
查询指定appIicationName实例 | GET /eureka/apps/{appIicationName} | 成功返回200,输出xml或json格式响应 |
根据appIicationName和InstanceId查询服务实例 | GET /eureka/apps/{appIicationName}/{instanceId} | 成功返回200,输出xml或json格式响应 |
根据指定instanceId查询服务实例 | GET /eureka/instances/{instanceId} | 成功返回200,输出xml或json格式响应 |
暂停服务实例 | PUT /eureka/apps/{appIicationName}/{instanceId}/status?value=OUT_OF_SERVICE | 成功返回200,失败返回500 |
恢复服务实例 | DELETE /eureka/apps/{appIicationName}/{instanceId}/status?value=UP(参数可不传) | 成功返回200,失败返回500 |
更新元数据 | PUT /eureka/apps/{appIicationName}/{instanceId}/metadata?key=value | 成功返回200,失败返回500 |
更改服务状态value值分别为OUT_OF_SERVER(暂停服务实例)、UP(恢复服务实例)、DOWN(服务实例下线)。
元数据使用
Eureka元数据有两种类型,分别为Spring Cloud定义的标准元数据和用户自定义元数据。
标准元数据
主机名、IP地址、端口号、状态页、健康检查等信息,这些信息都会被发布至服务注册表中,用于服务实例之间的调用。
自定义元数据
自定义元数据可以在服务实例调用时访问,不会影响服务注册中心(Eureka Server)功能,使用eureka.instance.metadata-map进行配置。
eureka.instance.metadata-map.key=value
复制
健康检查
服务提供者(Eureka Client)持续向服务中心(Eureka Server)发送心跳信息,服务中心认为该服务提供者提供的服务可用(仅仅依靠连接状态判定)。但是该状态不能保证服务提供者提供的服务真实可用,仅仅说明服务提供者和服务中心连接状态正常,能够维持节点间正常通信。此时就应该将服务提供者(Eureka Client)的服务应用状态提供给服务中心(Eureka Server)。
服务提供者添加依赖:
<!--添加健康检查依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
复制
服务提供者配置文件:
#开启健康检查
eureka.client.healthcheck.enabled=true
复制
服务上下线监控
在特定的使用场景中,我们需要对服务的上下线状态进行日志记录和邮件通知,Eureka中提供了事件监听的方式来进行支持。
目前Eureka支持的事件如下:
事件名称 | 事件作用 |
EurekaInstanceRegisteredEvent | 服务注册事件 |
EurekaInstanceCanceledEvent | 服务下线事件 |
EurekaInstanceRenewedEvent | 服务续约事件 |
EurekaRegistryAvailableEvent | 注册中心启动事件 |
EurekaServerStartedEvent | Eureka Server启动事件 |
@Component
public class EurekaServerStateChangeListener {
/**
* 服务实例注册事件监听
* @param registeredEvent:服务实例注册事件
*/
@EventListener
public void serviceRegisterEventListener(EurekaInstanceRegisteredEvent registeredEvent)
{
InstanceInfo instanceInfo=registeredEvent.getInstanceInfo();
System.err.println("服务名称:--------"+instanceInfo.getAppName()+"InstanceId-------------"+instanceInfo.getInstanceId()+";服务地址:---------"+instanceInfo.getIPAddr()+":"+instanceInfo.getPort());
}
/**
* 服务实例下线事件监听
* @param canceledEvent:服务实例下线事件
*/
@EventListener
public void serviceCanceledEventListener(EurekaInstanceCanceledEvent canceledEvent)
{
System.err.println("服务名称-------"+canceledEvent.getAppName()+",下线EurekaServer---------"+canceledEvent.getServerId());
}
/**
* 服务实例续约事件监听
* @param renewedEvent:服务实例续约事件
*/
@EventListener
public void serviceRenewedEventListener(EurekaInstanceRenewedEvent renewedEvent)
{
System.err.println("服务名称--------"+renewedEvent.getAppName()+",InstanceId----------"+renewedEvent.getServerId()+",续约EurekaServer--------"+renewedEvent.getServerId());
}
/**
*注册中心启动事件监听
* @param eurekaRegistryEvent:注册中心启动事件
*/
@EventListener
public void eurekaRegistryEventListener(EurekaRegistryAvailableEvent eurekaRegistryEvent)
{
System.err.println("注册中心启动"+System.currentTimeMillis());
}
/**
*
* @param eurekaServerStartedEvent:注册中心服务端启动事件
*/
@EventListener
public void eurekaServerStartedEventListener(EurekaServerStartedEvent eurekaServerStartedEvent)
{
System.err.println("注册中心服务端启动---------"+System.currentTimeMillis());
}
复制