EureKa服务注册中心

本文介绍了Eureka作为服务注册中心的概念、常见服务注册中心的对比,详细讲解了Eureka项目的搭建、实例获取,验证服务间的通信以及Eureka的负载均衡策略。同时,讨论了Eureka的下线配置与架构原理。
摘要由CSDN通过智能技术生成

生命不息、学习不止

入行java后,各种框架什么的,都需要掌握啊,题主也还是在不断学习中。

现在所有的互联网公司,都是在用微服务,除去一些老的传统行业,可能还是在使用Struts或者Spring等。微服务的相关概念,仍然是主流。一起学习吧!

目录

一、注册中心

二、常见的服务注册中心

三、EureKa项目搭建与实例获取

 四、验证是否可以访问

五、eureka访问服务是怎么选择提供者访问的呢?(负载均衡)

 六、其他配置 下线

七、架构原理


一、注册中心

凡是都是要先提问题的,什么是注册中心呢?

大家肯定在编写业务代码的时候,肯定会获取数据,当获取数据的URL是可变的,是不是经常会需要更改配置或者代码,还得重启服务。相信大家肯定都有遇到,所以在微服务中,服务与服务之间都是低耦合的。注册中心也就是集中管理服务的一个组件,也是微服务中最基本的一个组件。

二、常见的服务注册中心

下图是常见的注册中心及各自的特性

 CAP特性:Consistency、Availability、Partition tolerance

C:在分布式系统中的所有数据备份,在同一时刻是否是同样的值。(一致性)

A:保证每个请求不论成功或者失败都有回应。(可用性)

P:系统中任意信息的丢失或失败不会影响系统的继续运作。(分区容错性)

三、EureKa项目搭建与实例获取

1、新建项目--maven的多module项目--项目构建不会的自行先学习学习哈

2、新建EureKa的module(springboot)--导入依赖--cloud依赖--eureka依赖

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3、配置单机或集群

单机:一个服务

集群:多个服务

3.1 项目搭建好后,先增加注解:项目启动类加上@EnableEurekaServer

3.2 修改hosts配置 自定义域名对应本机IP即可

如:127.0.0.1   eureka-01 #多个就写多行

3.3  修改项目配置 

spring.application.name=eureka-server
eureka.instance.hostname=eureka-01
# ip + port显示
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}

以上配置必须有

单机:

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

集群:

eureka.client.service-url.defaultZone=http://test:666666@eureka-02:8762/eureka,http://test:111111@eureka-03:8763/eureka

单机或集群根据你的项目选择,集群需要注意,上面的test:666666为账号与密码,如果你的项目没有配置springSecurity则不需要,eureka-02是其他的eureka客户端

启动对应的服务后可访问你的eureka客户端查看集群是否搭建完成 

 成功访问上图就成功啦

4.新增消费者和提供者module (springboot工程)

导入依赖

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

4.1 项目搭建好后,先增加注解:项目启动类加上@EnableEurekaClient

4.2 增加配置

eureka.client.service-url.defaultZone=http://test:888888@eureka-01:8761/eureka,http://test:666666@eureka-02:8762/eureka,http://test:111111@eureka-03:8763/eureka
# 表示是否将自己注册到注册中心,默认为true
eureka.client.register-with-eureka=false

4.3 启动项目,查看是否注册到eureka (一般先启动提供者、后启动消费者

 四、验证是否可以访问

1、消费者中注入Bean

//获取实例
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
    return new RestTemplate();
}

@Autowired
private RestTemplate restTemplate;

@RequestMapping("/hello")
public String sayHello(){
    //指出服务地址   http://{服务提供者应用名名称}/{具体的controller}
    String url = "http://provider-user/user/sayHello";
    //返回值类型和我们的业务返回值一致 参数:地址、返回参数类型
    return restTemplate.getForObject(url,String.class);
}

提供者写对应的业务代码

@RequestMapping("/user/sayHello")
public String sayHello(){
    return "I'm provider-1 ,hello consumer!";
}

若指定方法是Get,那就用Get,如果是POST则使用postForObject,RestTemplate支持Http的相关方法

 上图就是访问成功啦!

五、eureka访问服务是怎么选择提供者访问的呢?(负载均衡)

负载均衡机制:

1、轮询--RoundRobinRule

2、随机--RandomRule

3、响应权重--ResponseTimeWeightedRule

4、最小并发--BestAvailableRule

源码:

 

 

定义规则:可自由配置

 1、全局配置访问规则 注入Bean

@Bean
public IRule rule(){
    return new RandomRule();
}

2、局部配置

配置文件中加入:服务实例名+....

provider-user.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

 六、其他配置 下线

1、注册服务保留失效服务的时间 eureka.server.eviction-interval-timer-in-ms 设置较小值,单位毫秒 
eureka.server.enable-self-preservation

2、业务服务 设置失效剔除 eureka.instance.lease-expiration-duration-in-seconds
指EureKa服务端在收到最后一次心跳之后等待的时间,单位为秒,超过则剔除,默认90秒

七、架构原理

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

方小强学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值