暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringCloud学习笔记——Eureka扩展使用

CodeWu 2019-06-20
1074

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());
}
复制


文章转载自CodeWu,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论