springcloud微服务篇--3.注册中心Eureka

news/2024/7/16 9:02:37 标签: spring cloud, 微服务, eureka, java, spring, maven, ide

一、注册中心Eureka

1.RestTemplate通过注册中心调用

通过springcloud微服务篇--2,RestTemplate的http调用方式引出问题:

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

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

消费者如何得知服务提供者的健康状态?

eureka的作用:

消费者该如何获取服务提供者具体信息?

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

eureka保存这些信息

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

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

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

消费者如何感知服务提供者健康状态?

服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态

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

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

二、搭建EurekaServer 

1.搭建EurekaServer

1.1创建项目,pom.xml引入spring-cloud-starter-netflix-eureka-server的依赖

<!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

 1.2编写启动类,添加@EnableEurekaServer注解

1.3添加application.yml文件,编写下面的配置:
server:
  port: 10086 # 服务端口
spring:
  application:
    name: eurekaserver # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

2.将user-service、order-service都注册到eureka

2.1在user-service/order-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
2.2 在application.yml文件,编写下面的配置:
spring
  application:
    name: orderservice
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

spring
  application:
    name: userservice
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

3.在order-service中完成服务拉取,然后通过负载均衡挑选一个服务,实现远程调用

 服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡

 3.1 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口
java">@Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://userservice/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

注意: userservice 对应注册中心的注册服务名称。

 3.2 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解

 

 4.总结

搭建EurekaServer

引入eureka-server依赖

添加@EnableEurekaServer注解

在application.yml中配置eureka地址

服务注册

引入eureka-client依赖

在application.yml中配置eureka地址

服务发现

引入eureka-client依赖

在application.yml中配置eureka地址

给RestTemplate添加@LoadBalanced注解

用服务提供者的服务名称远程调用

 拓展:有了注册中心,微服务之间还需要负载均衡----Ribbon。详见springcloud微服务篇-4


http://www.niftyadmin.cn/n/5262168.html

相关文章

SQL游标详解

SQL游标详解 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 深入探讨SQL游标&#xff1a;解锁数据库查询的新姿势 作为数据库查询的重要工具之一&#xff0c;SQL…

firewalld 防火墙启用后80端口无法进行访问

1、首先查看防火墙的状态是否开启,由下图红框中可知防火墙已经启动&#xff1b; systemctl status firewalld2、查看防火墙开启了那些端口&#xff1b; firewall-cmd --list-all上面的interfaces:代表防火墙对哪块网卡进行了设置&#xff08;默认是有线网卡&#xff0c;虚拟网…

算法Day31 房间收纳

房间收纳 Description 对于零落的玩具&#xff0c;你需要进行收纳&#xff0c;为了将最多的玩具进行收纳&#xff0c;请你合理分配收纳柜和房间数量。 请你将一些玩具收纳在一个房间中&#xff0c;给你一个二维数组 roomTypes&#xff0c;其中的roomTypes[i] {numberOfBoxes_…

Netty详细文档

Netty教程 文章目录 Netty教程 Netty简介Netty 的介绍Netty 的应用场景互联网行业游戏行业大数据领域其它开源项目使用到 Netty Netty 的学习资料参考 Java BIO编程I/O 模型BIO、NIO、AIO 使用场景分析Java BIO 基本介绍Java BIO 工作机制Java BIO 应用实例问题分析 Java NIO编…

ES6之函数新增的扩展

参数 ES6允许为函数的参数设置默认值 function log(x, y World) {console.log(x, y); }console.log(Hello) // Hello World console.log(Hello, China) // Hello China console.log(Hello, ) // Hello函数的形参是默认声明的&#xff0c;不能使用let或const再次声明 functi…

完美解决:ftp连接遇到 ftp: connect: 拒绝连接 或者 ftp: connect: 没有到主机的路由

目录 问题&#xff1a; 问题一&#xff1a;ftp: connect: 拒绝连接 问题二&#xff1a;ftp: connect: 没有到主机的路由 解决方法&#xff1a; 问题&#xff1a; 问题一&#xff1a;ftp: connect: 拒绝连接 问题二&#xff1a;ftp: connect: 没有到主机的路由 解决方法&#…

Java的引用类型有几种?区别是什么?

Java中的引用类型主要分为四种&#xff1a;强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;和虚引用&#xff08;Phantom Reference&#xff09;。这些引用类型在Java中主要用于…

从零开始学React【001】实战项目开始

背景 技术背景 没有正儿八经的接触过前端框架技术&#xff0c;最初入行是是在2000年&#xff0c;当时还是纯Htmljs. 后来的Html5都算是新技术。当出现各种框架&#xff0c;例如Vue时&#xff0c;我已经不在一线写代码很久了&#xff0c;所以对于package之类的都不熟。 之前都…