
微服务治理、缓存技术、异步通信、分布式搜索技术、持续继承(DevOps)


单体结构优缺点:

微服务:


1.不同微服务,不能重复开发相同业务
2.微服务数据独立,不要访问其他微服务的数据库
3.微服务可以将自己的业务暴露为接口,供其他微服务调用
源码在D/idea Project/cloudcode-master

案例分析:

spring提供的RestTemplate可以发送各种各样的http请求。

步骤:
1.注册RestTemplate(在启动器中)
/**
* Description: 创建RestTemplate并注入Spring容器
* @date:2022/7/27 12:07
* @params: []
* @return: org.springframework.web.client.RestTemplate
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// TODO: 2021/8/15 2.查询用户
User user = restTemplate.getForObject("http://localhost:8081/user/" + order.getUserId(), User.class);
// 3. 将用户信息封装进订单
order.setUser(user);
// 4.返回
return order;
}

Eureka架构中,微服务角色有两类:
*EurekaServer: 服务端,注册中心
** 记录服务信息
** 心跳监控
*EurekaClient:客户端
**Provoder:服务提供者
*** 注册自己的信息到EurekaServer
*** 每隔30秒向EurekaServer发送心跳
** consumer:服务消费者,例如案例中的order-service
***根据服务名称从EurekaServer中拉取服务列表
***基于服务列表做负载均衡,选中一个微服务后发起远程调用


<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 10086 # 服务端口
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
访问地址,服务注册

1.引入依赖(user-service模块中)
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
2.在user-service的application.yml文件中,配置如下:
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
如果想给一个服务启动多个实例,idea中 Copy Configuration

order-service可以基于服务名称拉取到user-service的两个实例信息,实现负载均衡。

访问http://localhost:8080/order/101和http://localhost:8080/order/102
发现user-service控制台有信息,说明两次服务均被拉取到,实现了负载均衡和远程调用。

配置文件方式和代码方式
轮询和随机

Ribbon默认是用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过配置开启饥饿加载。
