学习spring cloud记录4-Eureka

前言

Eureka是一个注册中心,在以前的记录中,两个服务之间的调用需要使用硬编码的方式,即把ip和端口号等地址写死在程序中,使用Eureka可解决此问题,但不知能解决这个问题,还有其他的作用。

Eureka的作用

1.消费者该如何获取服务提供者的信息?

服务提供者启动时,向Eureka注册自己的信息

eureka保存这些信息

消费者根据服务名称向eureka拉取提供者信息

2.如果有多个服务提供者,消费者该如何选择?

服务消费者利用负载均衡算法,从服务列表中选择一个

3.消费者如何感知服务器供着健康状态?

服务提供者会每隔30s向Eureka注册中心发送心跳请求,报告健康状态

eureka会更新记录服务器列表信息,心跳不正常的进行剔除

消费者就可以拉取到最新的信息

搭建Eureka服务

创建项目

 

 

 

 

 

 引入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.1.1</version>
        </dependency>

编写main函数

package ptiv.sinoam.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

编写配置文件(application.yml)

server:
  port: 9003

spring:
  application:
    name: eureka-server

eureka:
  client:
    service-url:  # eureka徐娅注册自己的信息
      defaultZone: http://127.0.0.1:9003/eureka

启动eureka

发现报错Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

这是因为该项目在父级pom中引入了jdbc,springboot启动时会自动装配,这个时候发现没有配置数据库所以会报错,在main方法中添加以下代码即可:

@EnableEurekaServer
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

即可启动成功,打开页面可以看到

 

 

 服务注册

将demo-user注册到eureka

引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>3.1.1</version>
</dependency>

编写配置文件

添加以下代码即可

eureka:
  client:
    service-url:  # eureka徐娅注册自己的信息
      defaultZone: http://127.0.0.1:9003/eureka

使用同样方式将demo-order注册到eureka中,启动后会看到注册的服务列表

 

 

 如果同一个服务启动多个会怎样

复制一个user服务,然后通过-Dserver.port=9004修改端口

 

 

 

启动后发现user多了服务

 

 

 Eureka服务发现

在消费者中修改写死的url,用服务名代替ip和port

        //调用demo-user里面的请求
//        String url = "http://localhost:9001/demouser/user/test";
        //用服务名进行替换
        String url = "http://demo-user/demouser/user/test";

然后添加负载均衡

找到restTemplate添加注解

    /**
     * 创建RestTemplate并注入Spring容器
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

重启order项目,调用接口后

 

 

 不断刷新后,可以在两个user项目的日志中发现都有走,说明实现了负载均衡

 

 

 

 

 

 结束

1.搭建Eureka

引入server依赖

添加@EnableEurekaServer注解

在配置文件中配置eureka地址

2.服务注册

引入client注解

在配置文件中配置eureka地址

3.服务发现

引入client注解

在配置文件中配置eureka地址

在restTemplate添加@LoadBalanced实现负载均衡

posted @ 2022-04-14 21:55  龙谷情Sinoam  阅读(44)  评论(0编辑  收藏  举报
Smiley face