服务发现-eureka
文章目录
1:前言
上一篇:springcloud系列教程|第二篇:服务提供者和服务消费者讲解了服务提供者和服务消费者的概念,以及使用了小栗子演示了两个微服务之间的调用,那么接下来将会介绍服务发现-eureka 以及它的使用。
2:环境准备
JDK 1.8
IDEA
Maven 3.3.9
springboot 1.5.x
springcloud Dalston.SR5
3:为什么要使用服务发现
对于运行在物理硬件上的传统应用,服务实例的网络位置(ip和端口号)是相对固定的,可以从配置文件中去读取。然而对于基于云端的、现代化微服务来说,却是不可取的,因为服务实例的网络位置经常动态改变,你不可能去通过配置文件配置固定IP和端口去查找,所以需要使用服务发现机制。
服务发现机制分为两部分:客户端服务发现和服务端服务发现。
3.1 客户端发现###
从图中分析:服务A是服务消费者,服务B是服务提供者,他们都被服务注册表管理着,而此时的服务A是作为客户端去调用服务B,也就意味着客户端决定被调用服务B的网络位置,客户端占着主导地位。
![](https://i-blog.csdnimg.cn/blog_migrate/b0e5556ad73e18d20659f1f7ee01aa78.png)
3.2 服务端发现
同样是服务A请求B服务,但是这次不同的是,服务A的请求是将服务发送到负载均衡,由负载均衡路由到指定的B服务,它占着主导地位。
![](https://i-blog.csdnimg.cn/blog_migrate/f0298073140b3aa3fc7f66d6c923d104.png)
Netflix Eureka 是客户端服务注册表的典型代表,为注册和请求服务实例提供了 REST API。服务实例使用 POST 请求来注册网络地址,每三十秒使用 PUT 请求来刷新注册信息。注册信息也能通过 HTTP DELETE 请求或者实例超时来被移除。以此类推,客户端能够使用 HTTP GET 请求来检索已注册的服务实例。那么接下来我们将重点介绍Eureka 的原理以及使用。
5:Netflix Eureka简介##
Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来。Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。客户端组件包含服务消费者与服务生产者(也就是我们所看到的服务A,服务B,服务C…)。在应用程序运行时,Eureka客户端向Eureka服务器端(注册中心)注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。
6:实战-编写Eureka服务端
新建Eureka服务端项目:
![](https://i-blog.csdnimg.cn/blog_migrate/d38d8820545dfec1e9f18273d8b56bcc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24e5465a88abb470411af782865ed909.png)
接着构建pom文件,打开地址:https://projects.spring.io/spring-cloud/
找到如图所示的地方,把这里的pom文件拷贝到你刚新建的项目下: 注意引入完成之后要更改eureka的pom文件,spring-cloud-starter-eureka -> spring-cloud-starter-eureka-server
![](https://i-blog.csdnimg.cn/blog_migrate/9a5d7b33624b527842d436cca9db2d00.png)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
/*因为这是eureka的服务器端,所以要引入eureka的服务端依赖*/
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
接下来配置一下application.yml文件:
server:
port: 8888
eureka:
client:
register-with-eureka: false #表示是否注册到eureka服务器中,因为它就是eureka服务器所以没有必要
fetch-registry: false #fetchRegistry表示是否从eureka服务器获取注册信息 因为它本身就是服务器,所以也没有必要
service-url:
defaultZone: http://localhost:8888/eureka #rureka的服务端地址
最后一步:添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
我们来看看eureka的服务端长的什么样子:
![](https://i-blog.csdnimg.cn/blog_migrate/578ec654c4834280f932a879aaf4ccef.png)
7:实战-编写Eureka客户端服务提供者##
请查看这篇springcloud系列教程|第二篇:服务提供者和服务消费者去获取代码,同样分别需要在pom文件、application.yml和启动类做一点改动,如下:
pom文件添加两段:注意这里的spring-cloud-starter-eureka没有加-server,因为它是服务端
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
application.yml配置:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka
instance:
prefer-ip-address: true #鼠标移动到地址上会显示ip地址
启动类配置:
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.springcloud.microserivceprovider.mapper")
public class MicroserivceProviderApplication {
public static void main(String[] args)
{
SpringApplication.run(MicroserivceProviderApplication.class, args);
}
}
eureka客户端服务消费者配置跟服务提供者一模一样,这里就不再赘述,我将提供源码给大家参考学习,有问题可以私聊或者留言,天天会看的哦。
最后我们看到eureka服务器上注册了两个服务:
![](https://i-blog.csdnimg.cn/blog_migrate/6a91c4c02491bc42beec9d29597cfea7.png)
源码地址:springcloud-lesson-2
加入群聊一起学习springcloud:877750371
如果有小伙伴觉得我写的不错的话可以关注一下我的博客,我会一直持续更新,也可以支持一下我的公众号哦:coldStone,主要会分享分布式系统相关的一系列技术,目前会推出springboot、springcloud和docker系列教程,后期会有关于中间件以及各个层面的性能优化的文章,同时还会分享一些赚钱理财的小套路哦,欢迎大家来支持,一起学习成长,程序员不仅仅是搬瓦工!
![](https://i-blog.csdnimg.cn/blog_migrate/42f76948d4057fc28c43807a93ef0564.jpeg)
如果有小伙伴觉得我写的不错的话可以关注一下我的博客,我会一直持续更新,也可以支持一下我的公众号哦:java架构师小密圈,会分享架构师所必须深入研究的技术,比如nettrt,分布式,性能优化,spring源码分析,mybatis源码分析,等等等,同时还会分享一些赚钱理财的小套路哦,欢迎大家来支持,一起学习成长,程序员不仅仅是搬瓦工!
公众号:分享系列好文章
:
交流群:群友互相分享资料