springcloud学习成本很大,入门要求很高,需要具备一定相应知识才可能入门,否则真是看天书,且学且耐心.加油。
Eureka
Eureka是Spring Cloud Netflix微服务套件中的一部分,Eureka是一个服务注册和发现模块。
Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。
搭建服务注册中心
首先打开Idea,创建一个Maven项目,作为父工程。
再新建一个model,作为Eureka的Server。
一:创建一个maven项目,作为父工程:如下图所示:
点击Next如下图所示:
然后再点击Next
再点击Finish,这样maven工程就创建好了,如图所示:
接下来在springcloud-demo工程中创建一个Module
点击Next,注意Artifact不能大写与大小写混合,只能小写
点击next,再点击finish,创建完的module生成的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--springboot版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.eureka.demo</groupId>
<artifactId>eureka-server-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<!--jdk1.8-->
<java.version>1.8</java.version>
<!--springcloud对应版本-->
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
接下来在启动类EurakeApplication前,添加@EnableEurekaServer。
package com.eureka.demo.eurekaserverdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerDemoApplication.class, args);
}
}
在application.properties中声明端口号,我这里用了9002作为端口号, 需要通过声明eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false来表明自己是一个Eureka server而不是client。
#端口号
server.port=9002
# 实例地址:localhost 127.0.0.1
eureka.instance.hostname=localhost
# 表明是一个server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
再运行项目,访问http://localhost:9002就会出现如下图所示的页面。
在没有注册服务时,No application available,没有服务被发现,如图中圈红的部分表示的一样。
注册中心搭建好了,接下来
搭建服务的提供者
搭建的大致步骤和前者相类似,但是在选择要引入的jar包时,需要选择Eureka Discovery。
在springcloudd-emo中创建一个Module
再点击next选择要引入的jar包时,需要选择Eureka Discovery。如下图所示:
项目搭建完成的pom文件:
<?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 https://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.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.eureka.provider</groupId>
<artifactId>eureka-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-provider</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<!--eureka-client版本-->
<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-test</artifactId>
<scope>test</scope>
</dependency>
<!--引入spring-web依赖,这样RestController等几个注解才能生效-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在application.properties中声明端口号,及一些配置。
#端口号
server.port=9003
# 将提供者注册到eureka注册中心中
eureka.client.service-url.defaultZone=http://localhost:9002/eureka/
spring.application.name=welcome
# some.words这里暂时不支持中文汉字
some.words=Welcome to Spring Cloud there is not support chinese words now!
启动eureka-provider 的module,页面输入:http://localhost:9003/welcome?name=zhangsan
浏览器中出现下图的界面,name后面的值可以自己定义。
我们再回到http://localhost:9002/端口的Eureka Server中,就有了我们刚刚注册的服务了。
红色的那句话表示Eureka进入了自我保护模式,保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。
至此:注册中心就写好了,代码下载地址:
接着继续往下学习.................加油..........