Spring Cloud Eureka(2022最新)

Spring Cloud Eureka

版本:

spring boot :2.6.4

spring cloud : 2021.0.1

一、搭建服务注册中心

1、创建springboot工程

artifactid:eureka-server,勾选springcloud-discovery里面的eureka-server

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 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.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sww.eureka</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.1</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-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>
            </plugin>
        </plugins>
    </build>
​
</project>
​

2、在启动类上加注解

@EnableEurekaServer :开启eureka注册中心功能

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

3、添加配置

application.yml:

eureka:
    client:
    # 不向注册中心注册自己
    register-with-eureka: false
    # 关闭检索功能,只做注册(为微服务架构中的各个服务客户端而服务)
    fetch-registry: false
    service-url:
    # 声明注册中心的注册地址
    # 地址内容:http:// ip地址+eureka-server端口号/eureka
        defaultZone: "http://localhost:8080/eureka"
server:
    port: 8080
​

4、启动注册中心

在浏览器地址栏输入:http://localhost:8080,访问eureka注册中心

二、注册服务提供者

1、创建服务客户端实例

创建一个springboot项目,或者使用已有项目进行依赖添加

修改pom.xml,添加如下配置:

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-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>
​
​

2、在启动类上加注解

@EnableEurekaClient : 开启服务客户端功能

@SpringBootApplication
@EnableSwagger2Doc
@EnableEurekaClient
public class SwaggerDemoApplication {
    public static void main(String[] args) throws IOException {
        SpringApplication.run(SwaggerDemoApplication.class, args);
    }
}
​

3、添加配置

application.yml:

eureka:
  client:
    service-url:
      defaultZone: "http://localhost:8080/eureka"    #声明注册中心的地址

4、启动服务客户端

观察eureka注册中心,注册进来了一个服务

三、高可用注册中心

上面的eureka注册中心只有一个,一旦发生故障,则系统不可用。马丁福勒关于微服务的论文中说到,要去中心化治理,这样一个核心的注册中心显然不能满足高可用的需求。于是,我们来搭建一个有多个eureka注册中心组成的eureka集群。

1、再创建一个springboot项目以搭建第二个服务注册中心

(步骤同:一、搭建服务 注册中心),yml文件如下:

# 取名eureka-server,端口:8081
server:
  port: 8081
spring:
  application:
    name: eureka-server 
eureka:
  client:
    service-url:
      defaultZone: "http://localhost:8081/eureka,http://localhost:8080/eureka/"

2、修改第一个注册中心的yml文件

注意: 去掉了两个false,defaultZone也修改了,让注册中心互相注册,互相发现,

eureka:
  client:
    service-url:
      defaultZone: "http://localhost:8081/eureka,http://localhost:8080/eureka/"
spring:
  application:
    name: eureka-server 
  server:
    port: 8080

3、启动两个注册中心,服务提供方,观察变化。

四、服务发现与消费

上面创建了3个springboot项目,分别是服务注册中心和服务提供方(服务生产者),但没有消费者。下面创建服务消费者去调用服务生产者提供的服务。一个服务客户端既可以是生产者也可以是消费者。

1、创建springboot项目

(1)、pom.xml:

早些时候的文章或书会让大家添加ribbon以来,但是在最新的spring cloud 官方文档中,已明确表示ribbon正处在维护模式,负载均衡默认的实现clienr为BlockingLoadBalancerClient(这是eureka-client依赖自动传递的),若项目中添加了ribbon依赖则会报错。

<?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.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sww.eureka</groupId>
    <artifactId>ribbon-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ribbon-consumer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</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>${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>
            </plugin>
        </plugins>
    </build>
</project>
​

(2)、启动类:

restTemplate 这段方法是自己添加的

@EnableEurekaClient
@SpringBootApplication
public class RibbonConsumerApplication {
    @Bean
    @LoadBalanced   // 使用默认的负载均衡策略
    public RestTemplate getRestTemplate(RestTemplateBuilder builder){
        return builder.build();
    }
​
    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }
​
}

(3)、application.yml

spring:
  application:
    name: consumer
server:
  port: 901
eureka:
  client:
    service-url:
      defaultZone: "http://localhost:8080/eureka/,http://localhost:8081/eureka/"

(4)、编写一个消费服务的controller

其中,restTmplate 是spring提供的代理发出http请求并处理返回结果的对象。

discoveryClient是用来检查注册中心是否已经成功注册了swagger-demo这个服务,我这里使用了另外一个服务提供者。

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate ;
    @Autowired
    private DiscoveryClient discoveryClient;
​
    @GetMapping("/add")
    public String testAddUser(){
        System.out.println(discoveryClient.getInstances("swagger-demo"));
        return restTemplate.getForEntity("http://swagger-demo/user/add",String.class).getBody();
    }
​
}
​

2、启动项目,并在浏览器访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值