zoukankan      html  css  js  c++  java
  • SpringCloud(二):服务的注册与发现(Eureka)

    一、什么是服务注册与发现
    Spring Cloud Eureka 模块提供的功能是被动式的服务发现。

    服务注册:每个用户去聊天室服务器上注册。

    服务发现:这样他的好友们就能看到你,你同时也将获取好友的上线列表.

    微服务中,服务就相当于聊天室的用户,而服务注册中心就像聊天室服务器一样。

    目前服务发现的解决方案有Eureka,Consul,Zookeeper等等。SpringCloud默认使用eureka作为服务注册中心。

    二、Eureka使用过程

    三、环境准备

    为了简介,以后的文章都不会贴出所有的Maven Pom依赖,除非特殊说明,否则版本都是以下面的版本为准。

    • SpringBoot 1.5.12.RELEASE
    • SpringCloud Dalston.SR5

    四、服务注册中心 Eureka Server

    简单来说就是三步:

    1.Maven依赖  

    2.注册中心配置 application.properties

    3.EnableEurekaServer服务类

    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>
      <groupId>cn.demo</groupId>
      <artifactId>springcloud_one</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.12.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>
            <spring-cloud.version>Dalston.SR5</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</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>

    2.注册中心配置 application.properties

    ## 该注册服务器的端口
    server.port=8001
    
    ## 应用启动名称
    spring.application.name=eureka-server
    
    ## eureka配置
    ## 注册服务器的名称
    eureka.instance.hostname=localhost
    ## 在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为
    ## 是否从eureka服务器获取注册信息,所以这里是false
    eureka.client.fetch-registry=false
    ## 是否注册自身到eureka服务器,因为当前这个应用就是eureka服务器,没必要注册自身,所以这里是false
    eureka.client.register-with-eureka=false
    ## 服务发布的地址
    eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

    3.  @EnableEurekaServer:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class, args);
        }
    }
    

    启动访问:http://localhost:8001 

    可以看到Application中No instances available,因为还没有任何服务注册。接下来我们写一个用户服务注册到eureka注册中心、

    四、服务提供方 Service Provider

    这里简单写一个服务项目,Service_Provider,为了看起来简单,接口也直接放在启动类里面。 

     

    pom.xml :

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>

    application.properties:

    ## 该服务发布的端口
    server.port=8011
    
    ## 注意这里是作为服务注册名称,在eureka注册中心注册这个名称,自动转化为全大写,之后调用服务用服务名调用
    spring.application.name=user-service
    eureka.client.register-with-eureka=true
    eureka.client.fetch-registry=true
    ## 注册服务中心的配置
    eureka.client.service-url.defaultZone=http://localhost:8001/eureka/

    启动类:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @EnableEurekaServer
    @RestController
    public class HelloServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(HelloServiceApplication.class, args);
        }
    
        @RequestMapping("hello")
        public String hello (String name) {
            return "hello, " + name;
        }
    }

    启动服务,然后继续查看eureka注册中心,刷新,查看变化,发现Hello-SERVICE服务已经注册在注册中心:

    测试用户服务:

    http://localhost:8011/hello?name=eureka

    五、服务消费方

    服务消费方式有restTemplate+ribbon以及feign,所以下章在讲如何消费注册中心的服务。

  • 相关阅读:
    (005)Linux 复制命令cp总提示是否覆盖的解决方法,在cp前加
    (030)Spring Boot之RestTemplate访问web服务案例
    Gym
    Gym
    Gym.102006:Syrian Collegiate Programming Contest(寒假自训第11场)
    BZOJ-5244 最大真因数(min25筛)
    HDU
    HDU 1272 小希的迷宫(并查集)
    HDU 3038 How Many Answers Are Wrong(带权并查集)
    POJ 1182 食物链(带权并查集)
  • 原文地址:https://www.cnblogs.com/lgg20/p/11757201.html
Copyright © 2011-2022 走看看