Spring Cloud 第一节 服务治理(Eureka)集群模式

Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。 
为什么要使用Eureka,因为在一个完整的系统架构中,任何单点的服务都不能保证不会中断,因此我们需要服务发现机制,在某个节点中断后,其它的节点能够继续提供服务,从而保证整个系统是高可用的。 
服务发现有两种模式:一种是客户端发现模式,一种是服务端发现模式。Erueka采用的是客户端发现模式。

客户端服务发现的架构如图:


Eureka Server会提供服务注册服务,各个服务节点启动后,会在Eureka Server中进行注册,这样Eureka Server中就有了所有服务节点的信息,并且Eureka有监控页面,可以在页面中直观的看到所有注册的服务的情况。同时Eureka有心跳机制,当某个节点服务在规定时间内没有发送心跳信号时,Eureka会从服务注册表中把这个服务节点移除。Eureka还提供了客户端缓存的机制,即使所有的Eureka Server都挂掉,客户端仍可以利用缓存中的信息调用服务节点的服务。Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。 
Eureka通过心跳检测、健康检查、客户端缓存等机制,保证了系统具有高可用和灵活性。
转载自: 点击打开链接

Eureka和Zookeeper不一样,后者追求一致性,而前者追求的是可用性。

因为springcloud是基于springboot来开发的,所以呢,首先肯定是要准备一个springboot的工程。

可以到 这里 直接生成一个springboot的工程,生成以后用开发工具导入即可,具体步骤就不写出来了,很简单的,唯一的一点就是在生成工程的时候springboot版本最好用推荐的版本,因为推荐的一般都比较稳定嘛!

导入工程之后:

1.引入maven依赖:

<?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.ruifeng</groupId>
    <artifactId>bobo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>bobo</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <!--这个dependencyManagement声明了dependencies中整体的版本,这里申明了后,在dependencies中就不需要声明cloud的版本了-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!--引入Eureka包,要记得加上server,因为我们肯定是需要一个注册中心的-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.3.5.RELEASE</version>
        </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>

2.配置yml,当然也可以是properties,因为我们是为了高可用,所以需要配置两个注册中心,两个注册中心相互注册,来实现高可用性:

server:
  port: 8889<!--设置端口号,注意配置中是不允许中文的, 另一个注册中心可以随意配置端口号-->

eureka:
  instance:
    hostname: eureka《注意这个名称不要重复》

  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/《另一个注册中心的访问地址》

  server:
    enable-self-preservation: false<!--关闭Eureka自我保护模式-->

spring:
  application:
    name: eureka-server《两个注册中心名称可以相同,也可以不同》


3.最后在启动类Application上加上注解

/**
 * 注册中心
 */
@SpringBootApplication
@EnableEurekaServer 《记得加上这个注解,Eureka注册中心就ok了》
public class BoboApplication {

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

到了这一步Eureka注册中心就搞定了:启动Application然后访问localhost:****(此处是配置的端口号),如果访问到下面的页面,则说明Eureka注册中心搞定了,红字的地方就是没有关闭自我保护:


需要我们重点关注的是:Instances currently registered with Eureka,现在看来还没有任何服务注册,当然了如果我们两个注册中心都启动了的话是可以看到有注册中心的服务的。最后的时候会将图贴出来。


然后我们需要再准备两个客户端来注册中心注册:

1.maven依赖:

<?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.ruifeng</groupId>
	<artifactId>bobo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>bobo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
	<dependencies>
        <!--因为我们现在注册的是客户端,所以不需要server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.5.RELEASE</version>
        </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>

2.yml配置文件,也可以创建多个客户端,修改端口就好:

server:
  port: 8082
spring:
  application:
    name: hello-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/,http://localhost:8889/eureka/  #这里就是向注册中心注册了,有几个就写几个,一般也不会太多。

3.Application

/**
 * 注册服务
 */
@SpringBootApplication
@EnableEurekaClient  //这里的注解就是客户端的了
public class BoboApplication {

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

4.我们可以自己写一个测试的Controller,返回一个字符串即可:

@RestController
public class HelloController {
    @RequestMapping("/user")
    public String hello(){
        return "hello Cloud2";
    }
}

5.写完之后,将所有的工程启动。然后在到Eureka页面查看:


OK,注册成功了,EUREKA-SERVER是我们的两个注册中心,相互注册的,

HELLO-SERVICE是我创建的两个客户端,也注册进来了,Status则是我们自己指定的端口号。

记录一下,为了以后使用方便,如果有什么补充的,欢迎留言。






阅读更多
文章标签: springcloud、Eureka
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Spring Cloud 第一节 服务治理(Eureka)集群模式

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭