JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos

这篇具有很好参考价值的文章主要介绍了JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

认识微服务

微服务技术对比

Dubbo SpringCloud SpringCloudAlibaba
注册中心 zookeeper, Redis Eureka, Consul Nacos, Eureka
服务远程调用 Dubbo协议 Feign(http协议) Dubbo, Feign
配置中心 SpringCloudConfig SpringCloudConfig, Nacos
服务网关 SpringCloudGateway, Zuul SpringCloudGateway, Zuul
服务监控和保护 dubbo-admin, 功能弱 Hystrix Sentinel

分布式服务架构案例

远程调用

  1. 注册RestTemplate
    /**
     * 创建RestTemplate并注入Spring容器
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
  2. 服务远程调用RestTemplate
    @Autowired
    private RestTemplate restTemplate;
    
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2. 利用RestTemplate发起http请求, 查询用户
        // 2.1 url路径
        String url = "http://localhost:8081/user/"+order.getUserId();
        // 2.2 发送http请求, 实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3 封装user到order
        order.setUser(user);
        // 4.返回
        return order;
    }
    

eureka注册中心

原理

在Eureka架构中, 微服务角色有两类:

  • EurekaServer: 服务端, 注册中心
    • 记录服务信息
    • 心跳监控
  • EurekaClient: 客户端
    • Provider: 服务提供者
      • 注册自己的信息到EurekaServer
      • 每隔30秒向EurekaServer发送心跳
    • Consumer: 服务消费者
      • 根据服务名称从EurekaServer拉取服务列表
      • 基于服务列表做负载均衡, 选中一个微服务后发起远程调用

搭建EurekaServer

  1. 引入eureka-server依赖
    <!-- eureka服务端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  2. 添加@EnableEurekaServer注解
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaApplication.class, args);
        }
    }
    
  3. 在application.yml中配置eureka地址
    server:
      port: 10086
    spring:
      application:
        name: eurekaserver
    eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka/
    

服务注册

  1. 引入eureka-client依赖
    <!-- eureka客户端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  2. 在application.yml中配置eureka地址
  3. 启动多个实例: 右键服务copy configuration, 在启动项vm option中修改端口号

服务发现

  1. 给RestTemplate添加@LoadBalanced注解, 负载均衡
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    
  2. 用服务提供者的服务名称远程调用
    // String url = "http://localhost:8081/user/"+order.getUserId();
    String url = "http://userserver/user/"+order.getUserId();
    

Ribbon负载均衡

修改负载均衡

  1. 代码方式 (全体)
    /**
     * 更换负载均衡策略为随机
     * @return
     */
    @Bean
    public IRule randomRule()
    {
        return new RandomRule();
    }
    ```erer
    
  2. 配置文件方式 (只针对某个微服务)
    userserver: # 给某个微服务配置负载均衡规则,这里是userserver服务
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
    

饥饿加载

  • Ribbon默认是采用懒加载, 即第一次访问时才会创建LoadBalanceClient, 请求时间很长.
  • 饥饿加载在项目启动时创建, 降低第一次访问的耗时
    ribbon:
      eager-load: # 饥饿加载
        enabled: true
        clients: userserver # 指定服务
    

nacos注册中心

快速入门

  1. 父工程添加spring-cloud-alibaba管理依赖
    <!-- nacos的管理依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.2.5.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    
  2. nacos客户端依赖
    <!-- nacos客户端依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  3. 配置文件
    spring:
      cloud:
        nacos:
            server-addr: localhost:8848 # nacos服务地址
    
  4. 集群配置
    spring:
      cloud:
        nacos:
            server-addr: localhost:8848 # nacos服务地址
            discovery:
                cluster-name: SH # 集群地址
    
  5. NacosRule负载均衡策略
    userserver: # 给某个微服务配置负载均衡规则,这里是userservice服务
        ribbon:
            # NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
            NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
    
    • 优先选择同集群服务实例列表
    • 本地集群找不到提供者, 才去其他集群寻找, 并且会报警告
    • 确定了可用实例列表后, 再采用随机负载均衡挑选实例
  6. 命名空间
    spring:
      cloud:
        nacos:
          discovery:
            namespace: xxx # 命令空间
    
    • namespace用来做环境隔离
    • 每个namespace都有唯一id
    • 不同namespace下的服务不可见

eureka和nacos对比

  1. nacos非临时实例
    spring:
      cloud:
        nacos:
          discovery:
            ephemeral: false # 设置为非临时实例
    
  2. nacos与eureka的共同点
    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  3. nacos与eureka的区别
    • nacos支持服务端主动检测提供者状态: 临时实例采用心跳模式, 非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除, 非临时实例则不会被剔除
    • nacos支持服务列表变更的消息推送模式, 服务列表更新更及时
    • nacos集群默认采用ap方式(强调数据的可用性), 当集群中存在非临时实例时, 采用cp模式(强调数据的可靠性和一致性); eureka采用ap方式

来源

黑马程序员. SpringCloud微服务文章来源地址https://www.toymoban.com/news/detail-576652.html

到了这里,关于JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT day1

     

    2024年02月12日
    浏览(35)
  • Qt : day1

     2.思维导图      

    2024年02月16日
    浏览(37)
  • 瑞吉外卖day1

    本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用 心 主要提供给消费者使用,可以在线浏

    2024年02月03日
    浏览(39)
  • ARM day1

    ARM可以工作的七种模式 用户、系统、快中断、中断、管理、终止、未定义 ARM核的寄存器个数 37个32位长的寄存器,当前处理器的模式决定着哪组寄存器可操作,且任何模式都可以存取: PC(program counter程序计数器)+ CPSR(current program status register当前程序状态寄存器)+ 5*SPSR(saved

    2024年01月16日
    浏览(40)
  • 学成在线----day1

    1、项目的背景,包括:是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。 2、项目的业务流程 3、项目的功能模块 4、项目的技术架构 5、个人工作职责 6、个人负责模块的详细说明,包括模块的设计,所用到的技术,技术的实现方案等。 一个例子: 我最近参

    2024年02月08日
    浏览(41)
  • 黑马头条---day1

    手机端查看 1、docker删除所有镜像命令 删除所有镜像的命令是Docker中一个非常常见的操作。下面是具体的实现步骤和命令示例: 这里的 docker ps -aq 和 docker images -aq 是一系列用于查找和选择容器和镜像的 Docker 命令。 2. docker删除镜像文件 如果使用 docker rmi 命令时突然出现“

    2024年02月05日
    浏览(36)
  • 云计算Day1

    查看电脑IP地址:Win+R输入cmd进入窗口输入ipconfig  ipv4地址查看  [root@localhost ~]# root:代表当前登录系统的用户的用户名 localhost:主机名 ~:当前用户的家目录 #:超级用户的命令提示符 启动网卡:ifup ens33 查看IP地址:ip a 查看时间: 系统时间:date 硬件时间:hwclock -r 修改时间

    2024年04月23日
    浏览(27)
  • QT DAY1作业

    1.QQ登录界面 头文件代码 main代码 源代码  2.思维导图

    2024年01月21日
    浏览(35)
  • 网络编程day1

    2024年02月01日
    浏览(51)
  • day1:前端缓存问题

    ❝ 「目标」 : 持续输出!每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长,方便理解和记忆。 ❞ ❝ 「主要面向群体:」 前端开发工程师(初、中、高级)、应届、转行、培训等同学 ❞ Day1-今日话题 「前端web项目缓存问题如何处理?

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包