ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Eureka注册中心

2021-10-11 17:35:17  阅读:150  来源: 互联网

标签:服务 中心 url server eureka EurekaServer 注册 服务提供者 Eureka


服务远程调用问题

    public Order queryById(Long id){
        Order order = orderMapper.findById(id);
        String url = "http://localhost:8081/user/"+order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
        return order;
    }
  • 出现硬编码
  • 如果有多个服务提供者,消费者如何选择
  • 消费者如何得知服务提供者的状态

服务提供者:一次业务处理过程中,被其它微服务调用的服务(提供接口给其它微服务)

服务消费者:一次业务处理过程中,调用其它微服务的服务(调用其它微服务提供的接口)

Eureka注册中心

Eureka工作流程

1、每一个微服务(服务的提供者和消费者)启动时,就必须向eureka-server中注册自身服务信息

2、当服务消费者需要服务提供者时,会去eureka-server中拉起服务提供者(服务提供者状态都是良好的)的信息

3、服务消费者可以通过负载均衡获取一个服务提供者的信息,远程调用即可

 

 微服务会定期向eureka-server发送心跳,如果不发送,eureka-server就会移除其服务信息

Eureka作用

  • 消费者该如何获取服务提供者具体信息?
    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择?
    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  • 消费者如何感知服务提供者健康状态?
    • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
    • eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

搭建Eureka

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

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

搭建EurekaServer

创建项目,添加eureka服务端依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
View Code

编写启动类,开启EurekaServer(@EnableEurekaServer)

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

添加application.yml文件

server:
  port: 10081
  
#eureka服务注册
spring:
  application:
    name: eurekaserver #eureka服务名
eureka:
  client:
    service-url:  #eureka地址信息
      defaultZone: http://localhost:10081/eureka

eureka也是个微服务,并把自己也注册到eureka,可以实现eureka集群

defaultZone可以有多个eureka地址信息,中间以逗号隔开

注意:端口号为10080时,会失败,不知到为什么

微服务注册

在微服务项目中添加eureka客户端依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

配置注册信息(微服务名、eureka地址)

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://192.168.223.129:3306/cloud-user?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: userservice
mybatis:
  type-aliases-package: com.marw.pojo
  configuration:
    map-underscore-to-camel-case: true

eureka:
  client:
    service-url:
      defaultZone: http://localhost:10081/eureka/
View Code

 

将user-service多次启动,模拟多实例部署,为了避免端口冲突,需要修改端口号

 

 

-DServer.port=8083

 

 

服务发现

修改访问的url路径,用注册到eureka的服务名替换ip和端口

String url = "http://userservice/user/"+order.getUserId();

在实例化RestTemplate方法上添加负载均衡注解(@LoadBalanced)

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

测试效果:

分别访问 http://localhost:8082/order/101 、http://localhost:8082/order/102

 

 

标签:服务,中心,url,server,eureka,EurekaServer,注册,服务提供者,Eureka
来源: https://www.cnblogs.com/WarBlog/p/15393521.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有