微服务中:Eureka注册中心,Eureka的作用,Eureka的基本操作,Ribbon负载均衡

- Eureka注册中心
    (1)之前的远程调用存在不足
        - 硬编码问题
            发起远程调用的时候如何知道IP和端口?
        - 如果出现多个服务的提供者
            9001/9003/9005,作为消费者如何选择?
        - 服务消费者如何知道服务提供者的状态
            9001/9003/9005,到底是哪一个可以正常使用,状态是健康的,到底哪一个宕机?
    (2)Eureka的作用
        如上的问题都可以使用SpringCloud的注册中心来解决,不得不提Eureka注册中心。
        Eureka注册中心将服务注册和服务发现同一封封装到其客户端。
        - 将所有微服务都交给注册中心管理。
        - 再要进行远程调用的时候去注册中心中找可以使用的微服务。
        - 如果找到的是多个通过负载均衡来处理和选择具体使用哪一个。
        - 所有微服务的实例向定时的注册中心报告自己的健康状态。
        
        发起远程调用的时候如何知道IP和端口?
            - 服务注册:当微服务启动将自己的信息注册到注册中心。
            - 注册中心的服务端保存服务名称到地址列表。
            - 服务拉取【服务发现】:服务的消费者根据名称获取可以使用的列表。
        如果出现多个服务的提供者,作为消费者如何选择?
            - 可以利用负载均衡算法在列表选择一个具体的实例来使用。
            - 利用选择的服务实例发起远程调用。
        服务消费者如何知道服务提供者的状态?
            - 定时的向注册中心报告自己的健康状态,称之为“心跳”。
            - 如果过时不报告,注册中心认为这个实例NODK了,从列表中删除。
            - 服务的消费者再拉取服务的时候,自然就不会找到没有及时报告健康状态的服务了。
    (3)Eureka的基本操作
        - 搭建注册中心
            - 注册中心也是单独的微服务,正常的创建一个Maven的SpringBoot模块即可。
                和以前一样。
            - 修改pom文件,引入Eureka的服务端依赖。
                <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>com.neusoft</groupId>
                        <artifactId>SpringCloud-Demo</artifactId>
                        <version>0.0.1-SNAPSHOT</version>
                    </parent>
                    <groupId>com.neusoft.eureka</groupId>
                    <artifactId>Eureka-Server</artifactId>
                    <name>Eureka微服务</name>
                    <description>Eureka注册中心</description>
                    <!-- Eureka服务端依赖 -->
                    <dependencies>
                        <dependency>
                            <groupId>org.springframework.cloud</groupId>
                            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                        </dependency>
                    </dependencies>
                </project>
            - 编写配置文件application.yml,端口号、名、客户端的配置。
                # 端口号
                server:
                  port: 10010
                # 名称
                spring:
                  application:
                    name: Eureka-Server
                # 客户端配置
                eureka:
                  client:
                    service-url: 
                      defaultZone: http://127.0.0.1:10010/eureka
                    fetch-registry: false # 同步其他的Server的列表 
            - 准备一个启动类,注意开启Eureka注册中心的功能。
                package com.neusoft.eureka;
                import org.springframework.boot.SpringApplication;
                import org.springframework.boot.autoconfigure.SpringBootApplication;
                import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
                /**
                 * Eureka注册中心微服务的启动类
                 * 注意:添加注解@EnableEurekaServer,开启注册中心功能。
                 *
                 */
                @SpringBootApplication
                @EnableEurekaServer  // 开启注册中心功能
                public class EurekaApp {                    
                    public static void main(String[] args) throws Exception {
                        SpringApplication.run(EurekaApp.class, args);
                    }
                }
            - 启动测试。
        - 进行服务注册
            - 修改用户微服务的pom文件,引入Eureka的客户端依赖。
                <!-- eureka-client -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                </dependency>
            - 修改用户微服务的配置文件application.yml,添加名称、Eureka地址。
                  application:
                    name: userservice # 名字
                # 客户端配置
                eureka:
                  client:
                    service-url: 
                      defaultZone: http://127.0.0.1:10010/eureka
            - 启动多个实例测试。
                ODK  没问题的,名称都是userservice,端口号是9001/9003/9005
                注意:模拟多个实例的时候idea和eclipse操作不太一样。
        - 进行服务发现
            - 修改订单微服务的pom文件,引入Eureka的客户端依赖。
                <!-- eureka-client -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                </dependency>
            - 修改订单微服务的配置文件application.yml,添加名称、Eureka地址。
                  application:
                    name: orderservice
                # 客户端配置
                eureka:
                  client:
                    service-url: 
                      defaultZone: http://127.0.0.1:10010/eureka
            - 拉取实例的时候进行后续的负载均衡,不用我们自己去做,只需要添加一个注解就可以。
                // 注册一个RestTemplate
                @Bean
                @LoadBalanced  // 实现负载均衡
                public RestTemplate restTemplate() {
                    return new RestTemplate();
                }
            - 测试远程调用结果:
                将原来的IP和端口替换成服务名。
                String url = "http://userservice/user/" + order.getUid();
                测试结果:
                {"id":5,"uid":5,"name":"纪念卡","price":30,"num":3,"user":{"id":5,"uname":"刘能","address":"铁岭"}}
            - 总结
                会自动从注册中心中根据名称拉取可用的服务列表,通过负载均衡提供可以使用的具体的实例。
                
        - Ribbon负载均衡
            (1)能够记住注解:@LoadBalanced实现所谓负载均衡,使用的默认的策略。
            (2)总结流程:
                - 拦截服务消费者的请求http://userservice/user/5
                - 获取名称
                - 到注册中心拉取可用的服务列表
                - 利用默认的负载均衡算出这一次要使用列表中的哪一个实例
                - 最终发起真实的请求,将服务名称换回IP+端口号:http://localhost:9003/user/5。
            (3)策略
                - 内置
                - 自定义
                    - 代码
                    - 配置文件
                建议:负载均衡的策略默认即可,不推荐修改。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维柒柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值