前言
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
一、关于微服务
微服务架构
示例服务拆分
注意
不同微服务,不要重复开发相同业务
微服务数据独立,不要访问其他数据库
暴露接口,供其他微服务调用
二、实现跨服务远程调用
步骤一:注册RestTemplate
代码如下(示例):
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* @description: 创建RestTemplate并注入spring容器
* @param:
* @return: org.springframework.web.client.RestTemplate
* @author: LYH
* @date: 2021/12/7 10:23
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
步骤二:服务器远程调用RestTemplate
修改order-service中的OrderService的queryOrderByid方法:
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//2.利用RestTemplate发送http请求,查询用户
// 2.1、url路径
String url = "http://localhost:8081/user/"+order.getUserId();
// 2.2、发送http请求,实现远程调用 其中url是路径,user.class是返回值的类型
User user = restTemplate.getForObject(url, User.class);
// 2.3、封装user当Order中去
order.setUser(user);
// 4.返回
return order;
}
}
服务调用关系
● 服务提供者:暴露接口给其它微服务调用
● 服务消费者:调用其它微服务提供的接口
● 提供者与消费者角色其实是相对的
● 一个服务可以同时是服务提供者和服务消费者
负载均衡
● Ribbon负载均衡规则
○ 规则接口是IRule
○ 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
● 负载均衡自定义方式
○ 代码方式:配置灵活,但修改时需要重新打包发布
○ 配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
● 饥饿加载
○ 开启饥饿加载
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 开始负载均衡的命名方式
ribbon:
eager-load:
enabled: true #开启饥饿加载
clients: usersevice #指定饥饿加载的服务名称
总结
这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单了解springCloud