微服务技术栈
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5WBzOes-1659583719826)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151621385.png)]](https://1000bd.com/contentImg/2022/08/10/012035285.png)
持续集成

技术详情

这里插入图片描述](https://img-blog.csdnimg.cn/3850cef441c246039707143cb2e74fa1.png)
**单体架构:**将业务的所有功能集中在一个项目中开发,打包成一个包部署。

优点:
**分布式架构:**根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,成为一个服务。
优点:
降低服务耦合
有利于服务升级扩展
缺点:
服务拆分
服务治理
分布式架构要考虑的问题:
**微服务:**是一种经过良好架构设计的分布式架构方案,微服务架构特征:
微服务架构
微服务这种方案需要技术和框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。在国内最知名的就是SpringCloud和阿里巴巴的Dubbo
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uI9oZu93-1659583719828)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151712411.png)]](https://1000bd.com/contentImg/2022/08/10/012036364.png)
企业需求:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQKs98nG-1659583719829)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151723745.png)]](https://1000bd.com/contentImg/2022/08/10/012036553.png)
SpringCloud 是目前国内使用最广泛的微服务框架。
SpringCloud 集成了个杂种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用的体验:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JmMhwU5e-1659583719829)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151732782.png)]](https://1000bd.com/contentImg/2022/08/10/012036757.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0onk8Ib-1659583719829)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151744174.png)]](https://1000bd.com/contentImg/2022/08/10/012037053.png)
服务拆分注意事项
导入cloud-demo项目
总结
案例:根据订单id查询订单功能
需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回
使用Spring提供的RestTemplate进行远程调用
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* @Describe 创建RestTemplate并注入Spring容器
* @Author ccl
* @Email c1374954185@163.com
* @date 2022/7/12 16:10
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.利用restTemplate发起http请求
String url = "http://localhost:8081/user/" + order.getUserId();
//发送http请求
User user = restTemplate.getForObject(url, User.class);
//3.封装user到Order
order.setUser(user);
// 4.返回
return order;
}
总结:
服务调用出现的问题
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvDsnzp2-1659583719829)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151803091.png)]](https://1000bd.com/contentImg/2022/08/10/012037293.png)
总结:
在Eureka架构中,微服务角色有两类:
动手实践
新建一个Maven模块
引入eureka依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
编写启动类
给eureka-server服务编写一个启动类,一定要添加一个EnableEurekaServer注解,开启eureka的注册中心功能
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
编写配置文件
server:
port: 10086 #服务端口
spring: # 为了服务的注册配置这些信息
application:
name: eurekaServer # 服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #eureka的地址信息
启动微服务
启动微服务后,在浏览器访问 localhost:10086
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPLv0wIC-1659583719830)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151840867.png)]](https://1000bd.com/contentImg/2022/08/10/012037437.png)
表示配置成功
引入依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
配置文件
spring:
application:
name: userservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
启动实例
总结

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6wK0NIk-1659583719830)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151927244.png)]](https://1000bd.com/contentImg/2022/08/10/012037893.png)
Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OjD2qF9l-1659583719831)(C:\Users\everybody\AppData\Roaming\Typora\typora-user-images\image-20220722151940787.png)]](https://1000bd.com/contentImg/2022/08/10/012038208.png)
通过定义IRule实现可以修改负载均衡的规则,有两者中方式:
@Bean
public IRule RandomRule(){
return new RandomRule();
}
配置文件方式:在Order-service的application。yml文件中添加新的配置也可以修改规则(指7针对某个微服务而言)
userService:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Ribbon默认采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: userService; #指定某个服务饥饿加载、结合的形式入下:
# -userService
# -userService
总结