1 Eureka Server
2 Service Provider
服务提供方
将自身服务注册到Eureka,从而使服务消费方能够找到
3 Service Consumer
服务消费方
从Eureka获取注册服务列表,从而能够消费服务
介绍
我们的服务发现一般分为两种模式一种为客户端发现模式(我们主要讲这个),一种为服务端发现模式
服务实例的网络位置都是动态分配的,而且因为扩展,失效和升级等需求,服务实例会常常发生动态改变,因此客户端一种更加复杂的服务发现机制
当使用客户端发现模式时,客户端负责决定相应服务实例之间的网络位置,并且对请求实现负载均衡,客户端从一个服务注册服务中查询,其中是所有可用服务实例的库,客户端使用负载均衡算法对从多个服务实例中选择出一个,然后发出请求
使用Eureka的步骤
1、搭建eureka server
1.1 创建工程
1.2 导入相应的eureka server的坐标
1.3 配置application.yml
server
1.4 配置启动类
package com.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
2、将服务提供者注册到eurekaServer上
2.1 引入EurekaClient的坐标
<!--引入EurekaClient-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 修改application.yml 添加EurekaServer的配置信息
server
2.3 修改启动类,添加服务发现的支持
package com.qyx;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
3、服务消费者通过注册中心获取服务列表,并调用
Eureka中的元数据:例如服务的主机名、IP等信息,可以通过EurekaServer获取,用于服务之间的调用
3.1 引入EurekaClient的坐标
<!--引入EurekaClient-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2 配置application.yml
server
3.3 获取服务的元数据
package com.qqq.controller;
import com.qqq.entity.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;