1.什么是微服务
微服务是一种架构,这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中。
2.微服务的特点
1.单一职责
2.面向服务
3.自治
4.隔离性强
3.为什么使用微服务
我们要先知道单体系统的优缺点,分布式系统的优缺点,在此不多赘述。而微服务是一种良好的分布式架构方案。
SpringCloud和微服务:
SpringCloud是目前使用最广泛的微服务架构,集成了各种微服务功能组件,并基于SpringBoot实现这些组件的自动装配。
微服务的远程调用:
1.在启动类注入RestTemplate
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
2.服务远程调用RestTemplate
微服务的调用关系:
服务提供者:暴漏接口给其他微服务调用。
服务消费者:调用其他微服务提供的接口。
消费者提供者是相对而言的。
那么有几个问题:
1.消费者如何获得提供者的具体信息?
答:提供者启动时向eureka注册自己的信息,eureka保存这些信息,消费者根据服务名称向eureka拉取提供者信息。
2.如果有多个服务提供者,消费者怎么选择?
答:消费者利用负载均衡算法,从服务列表挑选一个。
3.消费者如何感知提供者健康状态?(服务宕机了咋办)
提供者每隔30秒向EurekaServer发送心跳请求,eureka更新记录到服务列表,心跳不正常的会被剔除,消费者可以拉取到最新的信息。
EurekaServer搭建步骤:
1.导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.启动类上,添加@EnableEurekaServer注解
3.编写application.yml文件:
server:
port: 10086 # 服务端口
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
我们搭建好服务端之后就可以进行服务注册了:
1.导入依赖
<!--eureka客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.application.yml注册:
spring:
application:
name: userservice
eureka:
client:
service-url: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
最后我们想要远程调用服务:
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.利用RestTemplate发起http请求,查询用户
// 2.1.url路径
String url = "http://userservice/user/" + order.getUserId();
// 2.2.发送http请求,实现远程调用
User user = restTemplate.getForObject(url, User.class);
// 3.封装user到Order
order.setUser(user);
// 4.返回
return order;
}
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* 创建RestTemplate并注入Spring容器
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
也就是两步:1.把硬编码替换成我们euerka注册的name。2.注入RestTemplate时@LoadBalanced实现负载均衡。
总结流程:
1.搭建EurekaServer
---导入Server依赖
---启动类添加注解
---yml配置信息
2.注册服务
---导入Client依赖
---yml配置信息
3.服务拉取
---硬编码换成注册服务时,服务的name
---RestTemplate加上负载均衡注解