SpringCloud-Eureka

本文介绍了Spring Cloud Eureka作为服务治理的核心组件,详细阐述了Eureka的作用和选择Eureka的原因,以及如何搭建Eureka服务注册中心、编写服务提供者和消费者。通过RestTemplate展示了服务消费者的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Spring Cloud是什么?

                SpringCloud是一系列框架的有序集合。【包含了开发所需的其他的框架】
                它利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册、服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等,这些都可以用SpringBoot的开发风格做到一键启动和部署。
            通俗地讲,SpringCloud就是用于构建微服务开发和治理的框架集合(并不是具体的一个框架),主要贡献来自Netflix OSS。
    微服务--搭积木
        提供不同形状的积木块【服务】
        通过不同形状的积木块相互配合建造出来的城堡 【项目】

2.SpringCloud模块介绍       

    Eureka [juˈriːkə] :服务注册中心,用于服务管理。
    Ribbon [ˈrɪbən] :基于客户端的负载均衡组件。
    Hystrix:容错框架,能够防止服务的雪崩效应。
    Feign  [feɪn]:Web服务客户端,能够简化HTTP接口的调用。
    Zuul:API 网关,提供路由转发、请求过滤等功能。
    Config:分布式配置管理。
    Sleuth [sluːθ]:服务跟踪。
    Stream:构建消息驱动的微服务应用程序的框架。
    Bus:消息代理的集群消息总线。
    除了上述模块,还有 Cli、Task等。教程中只介绍一些常用的模块。  

3.SpringCloud版本介绍 

         在第一次访问 Spring Cloud 官网时一定会有一个疑惑那就是版本太多了,到底哪个是稳定版本?哪个才是自己需要的版本?接下来就给大家简单介绍一下版本的问题。

        参考图:

         从图中可以看到 Spring Cloud 不是像别的项目那样,版本号采用 1.1、1.2、1.3 这种的格式    因为 SpringCloud 是一个拥有诸多子项目的大型综合项目,可以说是对微服务架构解决方的综合套件组件,其中包含的各个子项目都独立进行着内容的迭代与更新,各自维护着自己的发布版本号
          建议:至于怎么选择适合自己的版本,大家可以在接触的时候直接选最新的稳定版本。新版本中的 Bug 肯定要少,并且更稳定。

4.SpringCloudEureka是什么?

        SpringCloudEureka是SpringCloudNetflix微服务套件的一部分,基于Netflix Eureka做了二次封装,主要负责实现微服务架构中的服务治理功能。
        SpringCloudEureka是一个基于REST的服务,并且提供了基于Java的客户端组件,能够非常方便地将服务注册到SpringCloudEureka中进行统一管理。
        服务治理是微服务架构中必不可少的一部分,阿里开源的 Dubbo 框架就是针对服务治理的。服务治理必须要有一个注册中心,除了用Eureka作为注册中心外,我们还可以使用 Consul、Etcd、Zookeeper等来作为服务的注册中心。
        用过Dubbo的读者应该清楚,Dubbo中也有几种注册中心,比如基于Zookeeper、基于Redis等,不过用得最多的还是Zookeeper方式。
    
        为什么 Eureka 比 Zookeeper 更适合作为注册中心呢?主要是因为 Eureka 是基于 AP 原则构建的,而 ZooKeeper 是基于 CP 原则构建的。
        在分布式系统领域有个著名的 CAP 定理,即 C 为数据一致性;A 为服务可用性;P 为服务对网络分区故障的容错性。这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个。
       Zookeeper 有一个 Leader,而且在这个 Leader 无法使用的时候通过 Paxos(ZAB)算法选举出一个新的 Leader。这个 Leader 的任务就是保证写数据的时候只向这个 Leader 写入,Leader 会同步信息到其他节点。通过这个操作就可以保证数据的一致性。
    总而言之,想要保证 AP 就要用 Eureka,想要保证 CP 就要用 Zookeeper。
       Dubbo 中大部分都是基于 Zookeeper 作为注册中心的。Spring Cloud 中当然首选 Eureka。

搭建Eureka服务注册中心 

         1.创建一个SpringBoot项目【2.5.12】

         2.导入依赖【1.SpringCloud依赖 2.Eureka服务依赖】

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.2-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>


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

 3.在主类中设置@EnableEurekaServer

@SpringBootApplication
//表示开启EurekaServer[注册中心]
@EnableEurekaServer
public class SpringcloudServerApplication {

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

}

4.配置配置文件 

spring.application.name=eurekaserver
server.port=8761
#由于该应用为注册中心, 所以设置为false, 代表不向注册中心注册自己
eureka.client.register-with-eureka=false
#由于注册中心的职责就是维护服务实例, 它并不需要去检索服务, 所以也设置为 false
#eureka.client.register-with-eureka一定要配置为false,不然启动时会把自己当作客户端向自己注册,会报错。
eureka.client.fetch-registry=false

5.启动注册中心服务,测试http://localhost:8761/,出现以下页面显示Eureka注册中心搭建成功

 使用Eureka编写服务提供者

1.创建一个SpringBoot项目【2.5.12】

2.导入依赖【1.SpringCloud依赖 2.Eureka服务依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--eureka-server-->
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>3.0.2</version>
</dependency>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.2-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

3.创建服务接口和实现类

public interface UserName {

    /**
     *  得到用户姓名
     * @return
     */
    String getUsername();
}
@Service("userService")
public class UserService implements UserName {


    @Override
    public String getUsername() {
        return "宁红叶";
    }
}

4.创建提供者的控制器

@RestController
public class UserController {

    @Autowired
    private UserName userName;

    @RequestMapping("username")
    public String getUserName(){
        return userName.getUsername();
    }
}

5.配置文件

spring.application.name=eurekaprovderdemo
server.port=8081
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#采用IP注册
eureka.instance.preferIpAddress=true
#定义实例ID格式
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}

6.主类设置@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient
public class SpringcloudProvideApplication {

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

}

7.测试服务提者

        1.启动注册中心服务
        2.运行服务提供者主类
        3.浏览器中测试:http://localhost:8761/  可以看见注册好的服务

 

 使用Eureka编写服务消费者

1.创建一个SpringBoot项目【2.5.12】
2.导入依赖【1.SpringCloud依赖 2.Eureka服务依赖】

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--eureka-server-->
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>3.0.2</version>
</dependency>
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.2-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

3.创建RestTemplateConfiguration配置类

    通过 RestTemplate 来消费接口
    RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。

@Configuration
public class RestTemplateConfiguration {

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

4.创建消费者的控制器,将创建好的RestTemplate注入进控制器

@RestController
public class UserBeanController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/showName")
    public String getUserName(){
        System.out.println("123");
        return restTemplate.getForObject("http://localhost:8081/username", String.class);
    }
}

5.配置文件

spring.application.name=eurekacomsumerdemo1
server.port=8082

6.主类设置@EnableEurekaClient注解

@SpringBootApplication
@EnableEurekaClient
public class SpringcloudConsumerApplication {

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

}

7.测试服务消费者者
    1.启动注册中心服务
    2.运行服务提供者主类
    3.运行服务消费者者主类

    4.浏览器访问:http://localhost:8082/showName

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值