微服务
1.认识微服务
SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
2. 服务拆分
需求 : 把订单信息和用户信息一起返回
从订单模块向用户模块发起远程调用 , 把查到的结果一起返回
步骤 :
2.1 注册RestTemplate
在启动类中注入RestTemplate
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
// 创建RestTemplate对象并注入容器
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
2.2 在订单业务层 利用RestTemplate发出http请求
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private RestTemplate restTemplate;
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) {
// 根据id查询订单并返回
Order order = orderService.queryOrderById(orderId);
// 利用RestTemplate发http请求
// url路径
String url = "http://localhost:8081/user/" + order.getUserId();
// 发送请求
User user = restTemplate.getForObject(url, User.class);
// 封装user
order.setUser(user);
return order;
}
}
3. Eureka
3.1 提供者和消费者
提供者 : 一次业务中,被其它微服务调用的业务(提供接口给其它微服务)
消费者 : 一次业务中, 调用其他微服务(调用其它微服务的接口)
3.2 Eureka原理分析
3.2.1 Eureka注册中心
3.2.2搭建Eureka注册中心
<!--eureka服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
新建eureka-server模块
启动类:
@SpringBootApplication
@EnableEurekaServer
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://localhost:10086/eureka # 地址信息
服务注册:
把user-service注册到EurekaServer下:
引入依赖
配置user-service的yml文件
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
username: root
password: 888888
driver-class-name: com.mysql.jdbc.Driver
application:
name: userservice # user服务名称
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka # 地址 信息
服务列表 :
3.2.3 在order-service完成服务拉取
原来的代码:
String url = "http://localhost:8081/user/" + order.getUserId();
修改后 :
String url = "http://userservice/user/" + order.getUserId();
加上负载均衡注解
@Bean
@LoadBalanced // 标记要被Ribbon拦截处理!
public RestTemplate restTemplate(){
return new RestTemplate();
}