SpringCloud入门之Eureka(一)
2019年03月07日,公司新项目用Vue+SpringCloud,之前也没有接触过,出差来北京这边学习并参与后期开发,希望每日有所得。
到公司先把项目下下来,然后一脸懵逼(这都什么玩意,一大堆)。没办法啃吧。
springcloud服务注册与发现
使用Eureka实现服务治理
作用:实现服务治理(服务注册与发现)
简介:
Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。(简介是复制官方的)
项目实战:
服务注册中心 :eureka-server
作用:服务注册中心提供服务注册功能
服务提供方:eureka-client
作用:注册服务到服务注册中心
服务注册中心 :eureka
新建一个SpringBoot项目(没有接触过SpringBoot的同学要先了解,SpringCloud都是围绕着这个东西搭建的)项目pom.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pk.SpringCloud</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
//指定springboot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
//指定SpringCloud版本
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
//eureka依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我们上面已经把eureka添加到我们的项目中了,那么怎么用呢?
SpringBoot与eurake搭配非常方便,紧紧需要一个注解。
找到我们的启动类,在类的上方加上@EnableEurekaServer注解,这就告诉我们项目启动的时候顺带着Eurake也启动了
/**
* 注册中心服务端
* @author 大昆昆
*/
@SpringBootApplication
@EnableEurekaServer //启动类的时候eureka也一起启动了
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
System.out.println("Eureka启动成功!");
}
}
光有这些还是不够的,既然是服务注册中心,那么你该有自己的地址啊,否则客户(client)要找你来注册服务,上哪找你呢?
再来看我的yml配置文件
//服务端口
server:
port: 8001
eureka:
instance:
hostname: localhost //实例对应的主机名
client:
#由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
registerWithEureka: false
#由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
这样我们运行一下我们的项目
项目成功运行了,让我们访问一下http://localhost:8001
这个界面就是eureka管理服务注册的界面,No instances avaliable标识当前注册中心没有任何服务注册。
接下来做一个Client注册到这个注册中心上去
我们用springins…什么乱七八糟的创建一个SpringBoot 添加web模块的项目
为什么要添加web模块?
他要注册的话肯定是持续有效的,如果不是web项目,执行完main函数服务就掉了,结果我们是看不到的。
看一下客户端的pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
//客户端依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
类似于服务端使用,服务端是证明自己是服务端,客户端只要让注册中心发现认可自己是客户端就可以了。在引导类上添加@EnableDiscoveryClient注解
这个注解的作用就是让注册中心发现登记自己
@SpringBootApplication
@EnableDiscoveryClient //让服务端发现并登记自己
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
你怎么让注册中心发现你?登记你?不会是让服务端在整个互联网上找你吧?那不累死了
(以下内容加入了很多我的个人理解,不知道正确不,希望大佬勿喷)
还记得我们服务端yml文件配置了一个server-url:defaultZone
这个server-url对应的是key:value值
defaultZone是注册中心在百度地图上的地址
客户端只需要按这个地址找到注册中心,然后在注册中心里登记自己就可以了。
看客户端的yml配置
server:
port: 8002
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/ //这里是服务端的实例地址
spring:
application:
name: Myfirst //应用名称
把我们的客户端跑起来
然后访问服务端的eureka服务管理界面
已经有一个名为 MYFIRST 的客户端实例 注册进来了