《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
口:"+port);
return product; }
(2) 服务消费者
修改服务消费者 shop_service_order模块中的启动类OrderApplication ,在创建RestTemplate方法上添加 @LoadBalanced 注解
/**
- 基于Ribbon的服务调用与负载均衡
*/
@LoadBalanced
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
在 shop_service_order的OrderController 中添加下单方法,并使用RestTemplate完成服务调用
@Autowired
private RestTemplate restTemplate;
@GetMapping(“/buy/{id}”)
public Product order() {
//通过restTemplate调用商品微服务
//Product product =
restTemplate.getForObject(“http://127.0.0.1:9002/product/1”, Product.class);
Product product = restTemplate.getForObject(“http://shop-serviceproduct/product/1”, Product.class);
return product;
}
(3) 测试
浏览器中请求http://localhost:9001/order/buy/1查看展示效果如下,已经可以在订单微服务中已服务
名称的形式调用商品微服务获取数据
1、负载均衡概述
在搭建网站时,如果单节点的 web服务性能和可靠性都无法达到要求;或者是在使用外网服务时,经常担心被人攻破,一不小心就会有打开外网端口的情况,通常这个时候加入负载均衡就能有效解决服务问题。
负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算
法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。
负载均衡的应用场景包括流量包、转发规则以及后端服务,由于该服务有内外网个例、健康检查等功
能,能够有效提供系统的安全性和可用性。
服务端负载均衡
先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择一个进行访
问;即在服务器端再进行负载均衡算法分配
客户端负载均衡
客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配
2、 基于Ribbon实现负载均衡
搭建多服务实例
修改 shop_service_product 的 application.yml 配置文件,已profiles的形式配置多个实例
spring:
profiles: product1
application:
name: shop-service-product
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
username: root
password: 111111
jpa:
database: MySQL
show-sql: true
open-in-view: true
cloud:
consul: #consul相关配置
host: localhost #ConsulServer请求地址
port: 8500 #ConsulServer端口
discovery:
#实例ID
instance-id: ${spring.application.name}-1
#开启ip地址注册
prefer-ip-address: true
#实例的请求ip
ip-address: ${spring.cloud.client.ip-address}
server:
port: 9002
spring:
profiles: product2
application:
name: shop-service-product
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
username: root
password: 111111
jpa:
database: MySQL
show-sql: true
open-in-view: true
cloud:
consul: #consul相关配置
host: localhost #ConsulServer请求地址
port: 8500 #ConsulServer端口
discovery:
#实例ID
instance-id: ${spring.application.name}-2
#开启ip地址注册
prefer-ip-address: true
#实例的请求ip
ip-address: ${spring.cloud.client.ip-address}
server:
port: 9004
分别启动两次服务器验证效果,并查看两个控制台发现已轮询的方式调用了商品服务
3、负载均衡策略
Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接口为com.netflix.loadbalancer.IRule ,实现方式如下:
-
com.netflix.loadbalancer.RoundRobinRule :以轮询的方式进行负载均衡。
-
com.netflix.loadbalancer.RandomRule :随机策略
-
com.netflix.loadbalancer.RetryRule :重试策略。
-
com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越高的被调用的可能性越大。
最后
金三银四到了,送上一个小福利!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
的权重,越高的被调用的可能性越大。
最后
金三银四到了,送上一个小福利!
[外链图片转存中…(img-j2YVXcoC-1714651187784)]
[外链图片转存中…(img-B1m7sduQ-1714651187784)]
[外链图片转存中…(img-Ckt0VR7e-1714651187785)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!