必威体育Betway必威体育官网
当前位置:首页 > IT技术

EureKa:服务注册与发现

时间:2019-08-19 05:15:33来源:IT技术作者:seo实验室小编阅读:59次「手机版」
 

eureka

GitHub地址

1.简介

EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现。Netflix在设计EureKa时遵循着AP原则,它基于R

EST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,功能类似于Dubbo的注册中心Zookeeper。

2.实现原理

这里写图片描述

EureKa采用C-S的设计架构,即包括了Eureka Server(服务端),EureKa client(客户端)。

1.EureKa Server 提供服务注册,各个节点启动后,在EureKa server中进行注册;

2 EureKa Client 是一个java客户端,用于和服务端进行交互,同时客户端也是一个内置的默认使用轮询负载均衡算法的负载均衡器。在应用启动后,会向Eueka Server发送心跳(默认30秒)。如果EUR额卡 Server在多个心跳周期内没有接受到某个节点的心跳,EureKa Server将会从服务注册表中将这个服务移出(默认90秒)。


3.SpringCloud Eureka的使用步骤

3.1Eureka Service端(服务端)

3.1.1.POM.XML

导入相依的依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

3.1.2.APPlication.yml

配置文件的的配置demo

eureka:
  instance:
    #单机hostname: localhost
    hostname: eureka7002.com         #eureka服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false           #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      #单机设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

      #Eureka高复用时设置其他的Eureka之间通信
      #defaultZone: http://eureka7003.com:7003/eureka/,http://eureka7004.com:7004/eureka/
       defaultZone: http://eureka7003.com:7003/eureka/
  #server:
    #enable-self-preservation: false   #Eureka服务端关闭心跳连接测试

3.1.3.主程序

添加注解

@EnableEurekaServer

demo

package com.mark.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

启动后访问设置的端口eg http://127.0.0.1:7002/

这里写图片描述

3.2Eureka Clinet(客户端)

3.2.1 pom.XMl

 <!-- 将微服务provider侧注册进eureka -->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka</artifactId>
 </dependency>

3.2.2application.yml

server:
  port: 8001


eureka:
  client:                                                   #客户端注册进eureka服务列表内
    service-url:
      #单机defaultZone: http://localhost:7002/eureka

      #集群是
      #defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/,http://eureka7004.com:7004/eureka/
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: microservicecloud-dept8001
    prefer-ip-address: true                                  #访问路径可以显示IP地址

info:                                                         #在Eure页面访问info返回的信息的配置
  app.name: atguigu-microservicecloud
  company.name: www.mark.com
  build.artifactId: $project.artifactId$
  build.version: $project.version$

3.2.3主程序类

添加注解:(注意和服务端区分开)

@EnableEurekaClient

@EnableDiscoveryClient

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class Deptprovider8003_App {

3.3补充

如果是Eureka Client的消费者,如果获取注册中心中的微服务,那么还需要在配置类中注入一个组件RestTemplate

demo

package com.mark.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.configuration;
import org.springframework.web.client.RestTemplate;

/**
 * Created by Choisaaaa on 2018/7/7.
 * 自定义配置类
 */

@Configuration
public class MyConfig {
    @Bean
    @LoadBalanced//使用负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

调用的demo

package com.mark.springcloud.controller;

import com.mark.springcloud.entities.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.requestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * Created by Choisaaaa on 2018/7/7.
 *
 */
@RestController
@RequestMapping("/consumer/dept")
public class DeptControler_Consumer {

    //private static final String REST_URL_PREFIX = "http://localhost:8001";
    //MICROSERVICECLOUD-DEP:为Eureka Server中心的微服务实例名称
    private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/add")
    public boolean add(Dept dept) {
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/add",Boolean.class,dept);
    }

    @RequestMapping(value = "get/{id}")
    public Dept get(@PathVariable("id") Long id) {
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id,Dept.class);
    }

    @RequestMapping(value = "/list")
    public List<Dept> list(){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list",List.class);
    }

    //消费者调用服务发现
    @RequestMapping("/discovery")
    public Object discovery() {
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/discovery",Object.class);
    }

}

相关阅读

注册表 Run、RunOnce 浅析

绝大多数使用过 Windows 操作系统的用户都不会对注册表的 Run、RunOnce 键值感到陌生,但你真的了解所有这些键值的细节吗?让我

天猫企业购怎么注册?其付款方式有哪些?

对于我们绝大多数人而言,所谓电商,就是在网上购物,一般而言,网上购物,咱们都是在零售商手中购买的,这确实也极大地方便了我们的日常生活

SourceTree跳过注册安装使用

SourceTree跳过注册安装使用 下载链接 https://www.sourcetreeapp.com/ 这个时候会要求注册账号,这个时候关掉就可以了 我们进

淘宝白号怎么看注册时间?什么是淘宝白号?

淘宝账号对于我们来说是很熟悉的,淘宝账号是我们登陆淘宝的凭证,最近很多朋友都在讨论有关淘宝白号的问题。对于很多新手来说淘宝白

Solid Converter pdf v9.x注册码

断网状态下输入序列号 Name: SolidConverterPDFv9 E-mail: [email protected] Organization: any Unlock Code: KTGK

分享到:

栏目导航

推荐阅读

热门阅读