Spring Cloud - Eureka服务注册与发现(入门)

目录

1.Eureka简介

2.Eureka⼊⻔案例(IDEA ,jdk11)

2.1 EurekaServer (服务注册中心)

2.1.1 pom文件内容

2.1.2 启动器(加入注解@EnableEurekaServer )

2.1.3 配置文件

2.1.4 启动并测试

2.2  cloud_payment(支付工程:服务提供者)

2.2.1 pom文件内容

2.2.2 启动器(加入注解@EnableDiscoveryClient )

2.2.3 配置文件

2.2.4 启动并测试

2.2.5 配置支付项目

2.3  cloud_order (订单⼯程 :服务消费者) 

2.3.1 pom文件内容

2.3.2 配置文件

2.3.3 启动器(加入注解@EnableDiscoveryClient )

RestTemplate

2.3.4 启动并测试

2.3.5 配置订单工程

3. 测试

3.1 测试工具 Postman

3.2 测试

访问   http://localhost:9000/payment/123  证明支付工程配置正确

访问  http://localhost:9001/order/payment/123   结果如下图,证明订单工程成功调用了支付工程配置正确

​ 4. Eureka Server集群(扩展)


1.Eureka简介

  Eureka是⼀个⽤于服务注册和发现的组件,Eureka分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中⼼,Eureka Client为Eureka客户端。
  在分布式架构中,服务会注册到Eureka注册中⼼,当服务需要调⽤其它服务时,就从Eureka 找到服务的地址,进⾏调⽤。Eureka在Spring Cloud中的作⽤是⽤来作为服务治理实现服务注册和发 现。
  Eureka主要涉及到三⼤⻆⾊:服务提供者、服务消费者、注册中⼼。
  服务注册是指,各个微服务在启动时,将⾃⼰的⽹络地址等信息注册到Eureka,服务提供者将⾃⼰的服务信息,如服务名、IP等告知服务注册中⼼。
  服务发现是指当⼀个服务消费者需要调⽤另外⼀个服务时,服务消费者从Eureka查询服务提供者的地址,并通过该地址调⽤服务提供者的接⼝。⼀个服务既可以是服务消费者,也可以是服务发现者。

  各个微服务与注册中⼼使⽤⼀定机制(例如⼼跳)通信。如果Eureka与某微服务⻓时间⽆法通信,Eureka会将该服务实例从服务注册中⼼中剔除,如果剔除掉这个服务实例过了⼀段时间,此服务恢复⼼ 跳,那么服务注册中⼼将该实例重新纳⼊到服务列表中,Eureka架构图,如图下图所示。

2.Eureka⼊⻔案例(IDEA ,jdk11)

  本节介绍Eureka的基本使⽤,创建Eureka Server,让后将上⾯⽀付微服务,和订单微服务注册到
Eureka Server中。Eureka基本机构主要包括以下3个⻆⾊。
Eureka Server:服务注册中⼼,提供服务注册和发现功能。
Provider Service:服务提供者,案例中就是⽀付微服务。
Consumer Service:服务消费者,案例中就是订单微服务。

2.1 EurekaServer (服务注册中心)

首先准备一个空项目 File -> New -> Project..

选择自己的JDK版本

 创建 EurekaServer

File -> new -> Module

next->选择依赖
选择下⾯依赖,如下图所示。 (注意Spring Boot版本)
Spring Boot 2.4.12
Spring Boot DevTools
Lombok
Eureka Server


2.1.1 pom文件内容

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.csh</groupId>
    <artifactId>Eureka-Bill</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Eureka-Bill</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>2020.0.4</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </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>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.1.2 启动器(加入注解@EnableEurekaServer

注:@EnableEurekaServer,声明当前应⽤为Eureka Server
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main( String [] args) {
SpringApplication.run(EurekaApplication. class , args);
}
}

2.1.3 配置文件

server:
  port: 9004
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
    # eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址
      defaultZone: http://127.0.0.1:9004/eureka/
    # 不注册⾃⼰
    register-with-eureka: false 
    # 不拉取服务
    fetch-registry: false

2.1.4 启动并测试

启动应⽤访问http://localhost:9004/,效果如下图所示。

2.2  cloud_payment(支付工程:服务提供者)

选择下⾯依赖,如下图所示。 (注意Spring Boot版本)

● Spring Boot 2.4.12

● Spring Boot DevTools

● Lombok

2.2.1 pom文件内容

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>cloud_payment</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloud_payment</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <spring-cloud.version>2020.0.3</spring-cloud.version>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </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>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.2.2 启动器(加入注解@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class BillApplication {
    public static void main(String[] args) {
        SpringApplication.run(BillApplication.class, args);
    }
}

2.2.3 配置文件

 

server:
  port: 9000
spring:
    application:
      name: cloud-payment
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9004/eureka/
      register-with-eureka: true
      fetch-registry: true

2.2.4 启动并测试

首先启动服务注册中心,然后再启动支付工程访问http://localhost:9004/,效果如下图所示。有红色底线标识证明我们配置成功

2.2.5 配置支付项目

controller


@RestController
@RequestMapping("/payment")
public class PaymentController {
    @GetMapping("/{id}")
    public ResponseEntity<Payment> payment(@PathVariable("id") Integer id) {
        Payment payment = new Payment(id, "⽀付成功");
        return ResponseEntity.ok(payment);
    }
}

entity

@Data//@Data 生成getter,setter ,toString等函数
@NoArgsConstructor//@NoArgsConstructor 生成无参构造函数
@AllArgsConstructor//@AllArgsConstructor 生成全参数构造函数
public class Payment {
    /*** 订单编号 */
    private Integer id;
    /*** ⽀付状态 */
    private String message;
}

2.3  cloud_order (订单⼯程 :服务消费者) 

根据2.1 与 2.2 order 工程如下

2.3.1 pom文件内容

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>cloud_order</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloud_payment</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <spring-cloud.version>2020.0.3</spring-cloud.version>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </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>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.3.2 配置文件

server:
  port: 9001
spring:
  application:
    name: cloud-order
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9004/eureka/
      register-with-eureka: true
      fetch-registry: true

2.3.3 启动器(加入注解@EnableDiscoveryClient

RestTemplate

  Spring提供了⼀个RestTemplate模板⼯具类,对基于Http的客户端进⾏了封装,并且实现了对象与json 的序列化和反序列化,⾮常⽅便。RestTemplate并没有限定Http的客户端类型,⽽是进⾏了抽象,⽬前

常⽤的3种都有⽀持:

HttpClient
OkHttp
JDK原⽣的URLConnection(默认的)
@SpringBootApplication
@EnableDiscoveryClient
public class CloudOrderApplication {

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

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

2.3.4 启动并测试

访问http://localhost:9004/,效果如下图所示。有红色底线标识证明我们配置成功

2.3.5 配置订单工程

controller

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/payment/{id}")
    public ResponseEntity<Payment> getPaymentById(@PathVariable("id") Integer id) {
        String url = "http://localhost:9000/payment/" + id;
        Payment payment = restTemplate.getForObject(url, Payment.class);
        return ResponseEntity.ok(payment);
    }
}

 entity


@Data//@Data 生成getter,setter ,toString等函数
@NoArgsConstructor//@NoArgsConstructor 生成无参构造函数
@AllArgsConstructor//@AllArgsConstructor 生成全参数构造函数
public class Payment {
    /*** 订单编号 */
    private Integer id;
    /*** ⽀付状态 */
    private String message;
}

3. 测试

3.1 测试工具 Postman

下载以及使用说明(点击访问)

3.2 测试

访问   http://localhost:9000/payment/123  证明支付工程配置正确

访问  http://localhost:9001/order/payment/123   结果如下图,证明订单工程成功调用了支付工程配置正确

4. Eureka Server集群(扩展)

 Eureka Server集群讲解(点击访问)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值