一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

释放双眼,带上耳机,听听看~!

本篇文章,很浅显的一步步讲解如何搭建一个能运行的springcloud项目(带所有操作截图)。相信!看完本篇之后,你会觉得springcloud搭建如此简单~~~~

一、 Eureka简介:

1.1  什么是eureka

Eureka是一个基于REST的服务,主要用于AWS云中的定位服务,以实现中间层服务器的负载平衡和故障转移,在 Spring Cloud 微服务架构中通常用作注册中心,我们称这个服务为 Eureka Server,还有一个与之交互的客户端称之为 Eureka Client。

1.2  eureka的功能

Eureka 、Consul 、Zookeepe,是Springcloud支持很轻松地实现服务的注册和发现功能的组件。看过我上一章博客的同学一定知道Eureka,Hystrix ,Ribbon,Zuul,都是 Netflix 公司开源的,一起被称为 Spring Cloud Netflix,所以Eureka 是Spring Cloud 首选推荐的服务注册与发现组件。

ps : 但是Eureka 2.0 开源工作宣告停止,所以不管后期Eureka 如何发展,但是对springcloud的影响都不是很大,毕竟还有Consul 、Zookeepe可以选择。

1.3  eureka服务注册与服务发现

服务发现有两种模式:一种是客户端发现模式,一种是服务端发现模式。Eureka采用的是客户端发现模式。Eureka Client需要每30秒给Eureka Server发一次心跳,同时更新Server上最新的注册信息到本地,如果Server多次没有收到来自客户端的心跳,那么在90秒内会被Server上剔除。

二、搭建第一个spring cloud项目

2.1  项目搭建环境 

本章及后面章节,我们使用的开发环境是 spring tool suite (sts)  + maven (当然你也可以使用IDEA + Gradle,目前使用的公司也很多)。

2.2  新建一个Eureka 项目

根据步骤一步一步搭建完后,项目结构如下:图中标红的地方,就是我们需要修改的地方。

一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

大家记住这个项目结构呦,下面的步骤会跟上面的项目结构相对应,所以对照起来学习,理解更加容易~

第一步 :  新建一个maven项目,命名为springcloud。这个maven项目没有什么业务功能,但是工作中都会新建一个这样的项目目录,我个人觉得主要是为了管理及配置方便:

1. 工作中,我们整个项目的名称就是这个maven项目的名称,在svn中拉取项目下,只要拉这个主工程的分支就行了。

2. 它的pom文件定义为父pom,其它module工程可以继承该pom,所以很多module工程共用的配置,就可以放到它的pom中。

pom文件配置如下:

 ps: 大家要关注下面的<modules>配置,后期新增的模块,都会加到父pom中来,所以不会每次都贴这个父pom的配置了。

<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.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

  <groupId>com.haly</groupId>
  <artifactId>springcloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>springcloud</name>
  <url>http://maven.apache.org</url>

  <modules>
  	<module>springcloud-eureka-client</module>
  	<module>springcloud-eureka-server</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    
  </properties>

  <dependencies>
    <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>

 

第二步 : 新建eureka服务模块

File -> New -> spring starter project  – > springcloud-eureka-server

  一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

 勾选,eureka server

 一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

修改springcloud-eureka-server模块中的pom.xml文件如下:

<parent>标签就是引入我们上面配置的父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 http://maven.apache.org/xsd/maven-4.0.0.xsd\">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.haly</groupId>
  		<artifactId>springcloud</artifactId>
 		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.haly</groupId>
	<artifactId>springcloud-eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloud-eureka-server</name>
	<description>新建一个springcloud项目</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR1</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>

第三步: 修改springcloud-eureka-server模块的application.properties 配置文件

在application.properties文件中加入eureka的配置项,现在我们使用的是.properties格式,其实工作中我们更加喜欢用.yml格式,只是语法不一样,有兴趣的同学可以去了解yml格式配置。

# 设置的eureka端口号
server.port=8761
# 设置eureka的主机地址
eureka.instance.hostname=localhost
#表示是否将自己注册到Eureka Server,默认为true。由于当前应用就是Eureka Server,故而设置为false
eureka.client.registerWithEureka=false
#表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设置为false
eureka.client.fetchRegistry=false
#Eureka server地址,查询服务和注册服务都需要依赖这个地址,多个地址可用逗号(英文的)分割
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
# 服务模块名称
spring.application.name=springcloud-eureka-server

第四步: 启动类上加@EnableEurekaServer注解

SpringcloudEurekaServerApplication类上加上@EnableEurekaServer注解,表示这个类为Eureka Server类,虽然注解配置简单,但是这个注解底层原理,还是做了很多事的。

ps :如果 @EnableEurekaServer注解不可用,那可能是SpringCloud版本不对,可尝试去父pom.xml文件中修改下版本version即可

package com.example.demo;

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

@EnableEurekaServer
@SpringBootApplication
public class SpringcloudEurekaServerApplication {

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

}

第五步 :启动SpringcloudEurekaServerApplication服务

在SpringcloudEurekaServerApplication类上右键  Run as -> spring boot app,启动项目。

启动项目成功后,在浏览器中输入 http://localhost:8761,我们可以看到如下页面 

 一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

目前上图红框中,没有eureka客户端注册到当前的eureka上,接下来,我们创建一个eureka客户端。

第六步:新建eureka客户端模块

File -> New -> spring starter project  -> springcloud-eureka-client

  一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

修改springcloud-eureka-client模块中,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>com.haly</groupId>
  		<artifactId>springcloud</artifactId>
 		 <version>0.0.1-SNAPSHOT</version>
	</parent>
	
	<groupId>com.haly</groupId>
	<artifactId>springcloud-eureka-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloud-eureka-client</name>
	<description>新建一个springcloud项目</description>

	<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>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

第七步:修改springcloud-eureka-client模块的application.properties 配置文件

ps: spring.application.name这个配置很重要,eureka可视化窗口上显示的就是这个名字,以后服务与服务之间相互调用一般都是根据这个name 

# 服务端口号
server.port=9300
# 服务名称
spring.application.name=springcloud-eureka-client
# 注册到的eureka服务地址
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

第八步:  eureka客户端启动类上加@EnableEurekaClient注解

通过注解@EnableEurekaClient 表明自己是一个eurekaclient,可以注入到对应配置的eureka上

package com.haly.springcloud;

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

@SpringBootApplication
@EnableEurekaClient
public class SpringcloudEurekaClientApplication {

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

}

第九步:在SpringcloudEurekaClientApplication类上右键  Run as -> spring boot app,启动项目。

启动项目成功后,在浏览器中输入 http://localhost:8761,我们可以看到如下页面 ,红色框标记的地方,出现了Eureka Client的服务名称(我们在application.properties中配置的名字)

一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

第十步: 测试springcloud-eureka-client中是否可以正常使用

新建一个业务类ClientTest,类上使用注解@RestController

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

package com.haly.springcloud;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClientTest {
	
    @RequestMapping(\"/test\")
    public String home(@RequestParam(value = \"name\", defaultValue = \"young码农\") String name) {
        return name + \",wellcom to springcloud!\";
    }
}

这时打开 浏览器,输入http://localhost:9300/test?name=young码农,页面结果如下,证明我们的项目搭建成功了,可以正常写业务逻辑了。

一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)

 

看到最后,如果你在搭建的过程中,出现问题,无法正常运行,可以评论区留言,我会尽全力解答~

 

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

wGenerator如何编写模板

2020-11-9 4:36:16

随笔日记

TensorFlow从1到2(八)过拟合和欠拟合的优化

2020-11-9 4:36:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索