当前位置: 首页 > news >正文

卧龙区网站建设世界杯最新排名

卧龙区网站建设,世界杯最新排名,公司建立自己的网站有什么好处,狗和女主人做爰网站文章目录 一、Eureka1、服务提供者与消费者2、Eureka原理分析3、搭建Eureka4、服务注册5、模拟多服务实例启动6、服务的发现 二、Ribbon1、负载均衡的原理2、源码分析3、负载均衡策略4、饥饿加载 一、Eureka 1、服务提供者与消费者 服务提供者:一次业务中&#xf…

文章目录

  • 一、Eureka
    • 1、服务提供者与消费者
    • 2、Eureka原理分析
    • 3、搭建Eureka
    • 4、服务注册
    • 5、模拟多服务实例启动
    • 6、服务的发现
  • 二、Ribbon
    • 1、负载均衡的原理
    • 2、源码分析
    • 3、负载均衡策略
    • 4、饥饿加载

一、Eureka

1、服务提供者与消费者

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

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

在这里插入图片描述

很明显,这是一个相对的概念。

2、Eureka原理分析

上一篇中,远程调用时,url参数是写死在代码中的,而不同的测试、生产、开发环境IP不同,有集群时,端口也不能固定。

在这里插入图片描述

很明显,硬编码肯定行不通。Eureka就是来解决这个问题的。

在这里插入图片描述

  • 每个服务启动的时候,将自己的信息注册到eureka中
  • 某个服务需要调用其他服务时,向eureka拉取对应的服务信息
  • 负载均衡到其中一台(如图中的localhost:8081)
  • 进行远程调用
  • 服务实例向eureka心跳续约,每30秒一次,eureka监控到某个服务实例不再心跳时,就从其注册信息中剔除这条信息。服务消费者拉取时当然也就拉取不到这个宕掉的服务实例
  • 新启动一个服务,服务信息注册到了eureka中…以此类推

在这里插入图片描述
接下来开始搭建Eureka,并进行服务注册和服务发现

在这里插入图片描述

3、搭建Eureka

  • 在父工程下新建eureka模块,选择Maven,点击Finish

在这里插入图片描述

  • 给该模块引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--版本在父工程中统一管理,这里不用写-->
  • 编写启动类,添加@EnableEurekaServer注解(自动装配的开关)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}
  • 添加application.yaml文件
server:port: 10086 # 服务端口
spring:application:name: eurekaserver # eureka的服务名称,eureka自身也是个微服务,也要注册自己的信息到eureka注册中心
eureka:client:service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka# eureka自身也是个微服务,也要注册自己的信息到eureka注册中心
# 王思聪住万达酒店也得身份证登记一下,虽然那就是他家的产业
  • 启动eureka模块

在这里插入图片描述
在这里插入图片描述

  • 注册成功

在这里插入图片描述

4、服务注册

接下来将user和order服务注册到eureka中:

  • 在user模块的pom文件中引入eureka客户端依赖
<!--eureka客户端依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在application.yaml文件中增加注册中心地址的配置
server:port: 8081
spring:application: name: userservice
eyreka:client:service-url:  # eureka的地址信息defaultZone: http://127.0.0.1:10086/eureka
  • 重启user模块(order模块操作步骤相同),注册成功

在这里插入图片描述

5、模拟多服务实例启动

上面完成的注册都是单服务实例的,接下来在IDEA中模拟启动多个服务实例:

  • 右键选择拷贝

在这里插入图片描述

  • -Dserver.port覆盖yaml文件中的端口,从而换个新端口

在这里插入图片描述

  • 启动这个新服务实例,注册成功

在这里插入图片描述

6、服务的发现

接下来实现:在order服务中完成服务信息的拉取,然后通过负载均衡挑选一个user服务,实现远程调用

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

  • 修改order代码,将服务IP和端口改为服务名
String url ="http://userservice/user/" + order.getUserId();
  • 在order启动类OrderApplication中的RestTemplate添加负载均衡注解
@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}
  • 分别调用order接口两次,传参101和102,看它远程调用了哪个user服务实例

在这里插入图片描述

  • 可以看到两个服务实例均有对应的日志,成功!

在这里插入图片描述

二、Ribbon

1、负载均衡的原理

分析:

我在浏览器中直接访问http://userservice/user/,访问失败,这是因为userservice既不是可用域名,也不是IP。那order调用到user服务的过程中经历了什么呢?

在这里插入图片描述

  • order发起请求
  • Ribbon拦截请求,拿到服务名,向eureka拉取信息
  • eureka返回服务列表信息给Ribbon
  • Ribbon将请求轮询到相应的服务地址上去

具体信息,在源码中打断点来调试看看。

2、源码分析

@LoadBalanced注解,就标识了调用方当前这个restTemplate这个对象发起的请求,要被Ribbon拦截

在这里插入图片描述
LoadBalancerInterceptor实现了ClientHttpRequestInterceptor接口:

在这里插入图片描述

在LoadBalancerInterceptor接口重写的intercent方法上打断点,调用order接口(中途会对user服务发起远程调用),断点进入到了这里:

在这里插入图片描述

继续往下,看到了Ribbon对象

在这里插入图片描述

继续往下:成功从eureka拿到服务列表信息

在这里插入图片描述
继续往下调试,看到了IRule这个接口,决定了负载均衡的策略

在这里插入图片描述

以上,调用接口http://localhost:8080/order/102后发生的事情如图:
- 接口中途通过restTemple远程调用http://userservice/user/1
- 被负载均衡拦截器拦截
- 获取url中的服务id,即userservice
- 动态服务列表均衡器向eureka拉取userservice的信息
- eureka返回服务列表给DynamicServiceListLoadBalancer
- 通过IRule挑选出某个服务,返回给RibbonLoadBalancerClient
- 请求被转发到了某个一具体的实例上

在这里插入图片描述

3、负载均衡策略

Ribbon的负载均衡策略是由IRule接口来定义的,它的每一个子接口就是一种策略。

在这里插入图片描述

具体的含义为:

在这里插入图片描述
以上策略中,Ribbon默认的是ZoneAvoidanceRule。想修改负载均衡策略有这两种方法:

代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

@Bean
public IRule randomRule(){return new RandomRule();  //改为随机
}

配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则

userservice: ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  #负载均衡规则

此时,多次调用order接口(代码中途远程调用user):

http://localhost:8080/order/102

可以看到转发到user实例上的请求不再有明显规律。

4、饥饿加载

重启order服务,然后两次访问order接口,发现耗时相差巨大:

在这里插入图片描述
在这里插入图片描述

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,因此请求时间会很长。

饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下配置开启饥饿加载:

ribbon:eager-load: enabled: true #开启饥饿加载clients: userservice  # 指定对userservice这个服务饥饿加载# clients为list,可添加多个

在这里插入图片描述

http://www.hkea.cn/news/885042/

相关文章:

  • 天津市建设委员会网站上海网站制作开发
  • 扬中网站建设墨子学院seo
  • 分析电子商务网站建设需求教案青岛今天发生的重大新闻
  • 汕头模板开发建站百度发布信息怎么弄
  • 健身网站开发项目总结关键词筛选工具
  • 重庆网站建设零臻靠谱国内永久免费的云服务器
  • 软件库合集软件资料2024郑州百度快照优化
  • 房地产开发公司网站建设方案seo去哪里学
  • 做网站可以赚钱吗百度小说搜索风云排行榜
  • 做网站交接需要哪些权限网站seo视频教程
  • 在网站怎么做收款二维码刷移动关键词优化
  • 问信息奥赛题怎么做 去哪个网站互联网网络推广
  • b2c电子商务网站系统下载专业网站seo推广
  • 引流推广的方法seo诊断工具
  • 平阴县建设工程网站直通车推广怎么做
  • 网站开发外包不给ftp高佣金app软件推广平台
  • 太原适合网站设计地址百度用户服务中心客服电话
  • 济南源码网站建设长沙网站seo推广公司
  • 北京网站制作17页和业务多一样的平台
  • 无锡市住房城乡建设委网站简单网页设计模板html
  • 武汉市大型的网站制作公司网站ip查询
  • 做仪表行业推广有哪些网站电商网站设计
  • 动静分离网站架构百度售后客服电话24小时
  • 做汽车配件生意的网站佛山seo关键词排名
  • 创意建站推荐百度做广告多少钱一天
  • 巴中网站建设公司百度seo怎么做网站内容优化
  • 查网站备案名称上海网络营销seo
  • 人是用什么做的视频网站网络营销方案设计毕业设计
  • 建设网站考虑因素关键词优化是怎么弄的
  • 陕西营销型网站建设推广普通话的内容简短