• SpringCloud Eureka服务注册及发现——服务端/客户端/消费者搭建


    Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。

    Eureka服务端,实现服务注册中心,eg:mima-cloud-eureka
    Eureka客户端,将服务注册到 Eureka,分为服务提供者和服务消费者,eg:mima-cloud-eureka-producer和mima-cloud-eureka-consumer

    mima-cloud-eureka——Eureka服务注册,注册mima-cloud-eureka-producer和mima-cloud-eureka-consumer服务
    mima-cloud-eureka-producer——Eureka服务提供者
    mima-cloud-eureka-consumer——Eureka服务消费者

    模拟mima-cloud-eureka-producer和mima-cloud-eureka-consumer服务注册到mima-cloud-eureka注册中心;
    模拟mima-cloud-eureka-producer服务提供get()方法供mima-cloud-eureka-consumer服务消费,访问mima-cloud-eureka-consumer服务,浏览器输出"hi,${id}"字符串。

    1、Eureka 服务端
    a、新建mima-cloud-eureka项目

    b、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>
        <parent>
            <groupId>com.mimaxueyuan</groupId>
            <artifactId>mima-cloud-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>mima-cloud-eureka</artifactId>
        <packaging>jar</packaging>
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
        </dependencies>
    </project>

    c、application.yml

    debug: false
    spring:
      application:
        name: mima-cloud-eureka
    security:
      basic:
        enabled: false
    server:
      port: 8761
    eureka:
      instance:
        hostname: localhost
      client:
        #不向Eureka注册自己
        register-with-eureka: false
        #不检查其他的EurekaServer节点
        fetch-registry: false
        service-url:
          #设置eureka服务器所在的地址,查询服务和注册服务程序都注册到这个地址(服务暴露的地址)
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/   

    d、在启动类中使用EnableEurekaServer注解

    package com.mimaxueyuan.cloud.eureka;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {
        
        public static void main(String[] args) {
            new SpringApplicationBuilder(EurekaApplication.class).web(true).run(args);
        }
        
    }

    e、启动Eureka服务端,效果如下

    No instances available,表示目前还没有服务注册进来。

    现在,我们已经注册了一个服务注册中心。

    2、Eureka 客户端,将服务注册到Eureka
    2.1、mima-cloud-eureka-producer——Eureka 客户端,服务提供者
    a、新建mima-cloud-eureka-producer项目

    b、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>
        <parent>
            <groupId>com.mimaxueyuan</groupId>
            <artifactId>mima-cloud-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>mima-cloud-eureka-producer</artifactId>
        <dependencies>
            <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>
        </dependencies>
    </project>

    c、application.yml

    debug: false
    spring:
      application:
        name: mima-cloud-eureka-producer
    server:
      port: 9907
    eureka:
      client: 
        serviceUrl: 
          defaultZone: http://localhost:8761/eureka/
      instance:
        prefer-ip-address: true
        instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port} 

    d、ProducerController业务类,提供get()方法

    package com.mimaxueyuan.producer.controller;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.mimaxueyuan.producer.entity.User;
    
    @RestController
    public class ProducerController {
        
        @GetMapping("/get/{id}")
        public String get(@PathVariable String id) {
            return "hi,"+id;
        }
    }

    e、启动类中使用@EnableEurekaClient注解

    package com.mimaxueyuan.producer;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class ProducerApplication {
        
        public static void main(String[] args) {
            new SpringApplicationBuilder(ProducerApplication.class).web(true).run(args);
        }
        
    }

     

    f、启动Eureka客户端
    访问http://localhost:8761/

    看到MIMA-CLOUD-EUREKA-PRODUCER,表示mima-cloud-eureka-producer服务已注册进来,交给mima-cloud-eureka注册中心维护管理。


    2.2、mima-cloud-eureka-consumer——Eureka 客户端,服务消费者
    a、新建mima-cloud-eureka-consumer项目

    b、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>
      <parent>
        <groupId>com.mimaxueyuan</groupId>
        <artifactId>mima-cloud-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
      </parent>
      <artifactId>mima-cloud-eureka-consumer</artifactId>
        <dependencies>
            <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>
        </dependencies>
    </project>

    c、application.yml

    spring:
      application:
        name: mima-cloud-eureka-consumer
    server:
      port: 8802
    eureka:
      instance:
        prefer-ip-address: true
      client:
        serviceUrl: 
          defaultZone: http://localhost:8761/eureka/

    d、ConsumerController业务类,调用get()方法

    package com.mimaxueyuan.consumer.controller;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import com.mimaxueyuan.consumer.entity.User;
    
    @RestController
    public class ConsumerController {
        
        @Autowired
        private RestTemplate restTemplate;
        
        @GetMapping("/c/get/{id}")
        public String get(@PathVariable String id) {
            String result = restTemplate.getForObject("http://mima-cloud-eureka-producer/get/"+id, String.class);
            return result;
        }
    }

    e、启动类中使用@EnableEurekaClient注解

    package com.mimaxueyuan.consumer;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class ConsumerApplication {
        
        @Bean
        @LoadBalanced
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
        
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
        
    }

     

    f、启动Eureka客户端
    访问http://localhost:8761/

    看到MIMA-CLOUD-EUREKA-CONSUMER,表示mima-cloud-eureka-consumer服务已注册进来,交给mima-cloud-eureka注册中心维护管理。

    访问http://localhost:8802/c/get/100

    现在,Eureka 服务的注册和发现的例子模拟完成。

    3、父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>
        <groupId>com.mimaxueyuan</groupId>
        <artifactId>mima-cloud-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
        </parent>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Edgware.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
        <modules>
            <module>mima-cloud-eureka</module>
            <module>mima-cloud-eureka-producer</module>
            <module>mima-cloud-eureka-consumer</module>
        </modules>
    </project>

     

  • 相关阅读:
    算法之美_源码公布(5)
    SDL2源码分析2:窗体(SDL_Window)
    hdu5303Delicious Apples
    Android之怎样给ListView加入过滤器
    EntboostChat 0.9(越狱版)公布,iOS免费企业IM
    unix关于打包命令zip的使用
    用 query 方法 获得xml 节点的值
    用友ERP T6技术解析(六) 库龄分析
    [笔试题] 两个有趣的问题
    使用SecueCRT在本地主机与远程主机之间交互文件
  • 原文地址:https://www.cnblogs.com/linjiqin/p/10085262.html
Copyright © 2020-2023  润新知