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

Spring Cloud · 2019-05-31 · 211 人浏览

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
@EnableEurekaClientpublic 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: 8802eureka:
  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;

@RestControllerpublic 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
@EnableEurekaClientpublic 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>

复制代码