zoukankan      html  css  js  c++  java
  • spring cloud 服务注册/发现/提供/调用 demo

    spring cloud 服务注册/发现

    Spring Cloud使用erureka server,  然后所有需要访问配置文件的应用都作为一个erureka client注册上去。eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下erureka server也是一个eureka client ,必须要指定一个 server。

    创建Eureka Server

    1).创建一个Maven工程helloworld.eureka.server, pom.xml内容如下:

    <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.lx</groupId>
      <artifactId>helloworld.eureka.consumer</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>helloworld.eureka.consumer</name>
      <url>http://maven.apache.org</url>
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.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>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</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>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>
    
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    </project>

     2). 用Spring Boot创建一个服务类EurekaServerApplication,需要一个注解@EnableEurekaServer加在springboot工程的启动类上

    /**
     * 
     */
    package com.lx.helloworld.eureka.server;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    /* author:tracy.bai
    date:2018年10月18日 下午3:12:13
     **/
    /**
     * @author tracy.bai
     *
     */
    
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
    	
    	public static void main(String[] args) {
    		       SpringApplication.run(EurekaServerApplication.class, args);
    		    }
    
    }
    

      3).eureka server的配置文件appication.yml,其中registerWithEureka:false和fetchRegistry:false表明自己是一个eureka server

    server:
       port: 8761
    
    eureka:
       instance:
           hostname: localhost
       client:
           registerWithEureka: false
           fetchRegistry: false
           serviceUrl:
               defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    

      4)启动eureka server,然后访问http://localhost:8761, 界面如下, "No instances available" 表示无client注册

    创建Eureka Client

    1). 创建一个Maven工程helloworld.eureka.client, pom.xml内容如下:

    <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.lx</groupId>
      <artifactId>helloworld.eureka.client</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>helloworld.eureka.client</name>
      <url>http://maven.apache.org</url>
    
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.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>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</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>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>
    
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    </project>
    View Code

    2).  创建主类EurekaClientApplication

    使用@EnableEurekaClient注解表明是client

    /**
     * 
     */
    package com.lx.helloworld.eureka.client;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /* author:tracy.bai
    date:2018年10月18日 下午3:47:16
     **/
    /**
     * @author tracy.bai
     *
     */
    
    @SpringBootApplication
    @EnableEurekaClient
    @RestController
    public class EurekaClientApplication {
          public static void main(String[] args) {
                 SpringApplication.run(EurekaClientApplication.class, args);
             }
    
             @Value("${server.port}")
             String port;
             @RequestMapping("/")
             public String home() {
                 return "hello world from port " + port;  
                 
             }
    
             @RequestMapping("/home2")
             public String home2() {
                 return "hello world from port home2 " + port;  
                 
             }
    
    }
    View Code

    3) eureka client的配置文件appication.yml

    eureka:
         client:
            serviceUrl:
                 defaultZone: http://localhost:8761/eureka/
    server:
        port: 8762
    spring:
        application:
            name: service-helloworld
    View Code

    4). Client启动后, 可以访问http://localhost:8762

    创建消费者

    1). 创建一个Maven工程helloworld.eureka.consumer, pom.xml内容如下:

    <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.lx</groupId>
      <artifactId>helloworld.eureka.consumer</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>helloworld.eureka.consumer</name>
      <url>http://maven.apache.org</url>
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.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>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</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>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</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>
    
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    </project>
    View Code

    2).  创建主类ConsumerApplication

    /**
     * 
     */
    package com.lx.helloworld.eureka.consumer;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.feign.EnableFeignClients;
    
    /* author:tracy.bai
    date:2018年10月18日 下午4:53:41
     **/
    /**
     * @author tracy.bai
     *
     */
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    public class ConsumerApplication {
        
        public static void main(String[] args) {
                
                SpringApplication.run(ConsumerApplication.class, args);
                
            }
    
    
    }
    View Code

    3).  写一个针对于提供者的rest服务的接口.

    /**
     * 
     */
    package com.lx.helloworld.eureka.consumer;
    
    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    /* author:tracy.bai
    date:2018年10月18日 下午5:02:17
     **/
    /**
     * @author tracy.bai
     *
     */
    
    @FeignClient(name="service-helloworld")
    public interface HelloProvider {
        
        @RequestMapping(value = "/")
        public String hello();
    
    }
    View Code

    4) 将这个bean 注入到control中,像普通的访问方式进行访问即可.

    /**
     * 
     */
    package com.lx.helloworld.eureka.consumer;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /* author:tracy.bai
    date:2018年10月18日 下午5:04:01
     **/
    /**
     * @author tracy.bai
     *
     */
    
    @RestController
    public class HelloControl {
        
        @Autowired
        HelloProvider HelloProvider;
     
        @RequestMapping("/")
        public String index() {
            return HelloProvider.hello();
        }
    
    
    }
    View Code

    5)配置文件

    application.properties

    spring.application.name=spring-cloud-caller
    server.port=8002
    eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
    View Code

    6)启动类

    /**
     * 
     */
    package com.lx.helloworld.eureka.consumer;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.netflix.feign.EnableFeignClients;
    
    /* author:tracy.bai
    date:2018年10月18日 下午4:53:41
     **/
    /**
     * @author tracy.bai
     *
     */
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    public class ConsumerApplication {
        
        public static void main(String[] args) {
                
                SpringApplication.run(ConsumerApplication.class, args);
                
            }
    
    
    }
    View Code

    代码:https://gitee.com/baixingfa/springclouddemo/

  • 相关阅读:
    2013,爱上暗色调
    [转]Sublime Text 使用介绍、全套快捷键及插件推荐
    委托、事件
    ASP.NET中常用的三十三种代码 .NET技术 / ASP.NET
    台湾综艺节目
    C# 中的委托和事件
    ASP.net 静态化页面之的URL重写
    源码
    毕业5年决定你的一生
    常见错误 不能打开注册表关键字
  • 原文地址:https://www.cnblogs.com/lovefendi/p/9816309.html
Copyright © 2011-2022 走看看