微服务
1.认识微服务
SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:
2. 服务拆分
需求 : 把订单信息和用户信息一起返回
从订单模块向用户模块发起远程调用 , 把查到的结果一起返回
步骤 :
2.1 注册RestTemplate
在启动类中注入RestTemplate
@MapperScan("cn.itcast.order.mapper")@SpringBootApplicationpublic class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}// 创建RestTemplate对象并注入容器@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
2.2 在订单业务层 利用RestTemplate发出http请求
@RestController@RequestMapping("order")public class OrderController {@Autowiredprivate OrderService orderService;@Autowiredprivate 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);// 封装userorder.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@EnableEurekaServerpublic class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class,args);}}
配置文件 :
server:port: 10086spring:application:name:eurekaserver # 服务名称eureka:client:service-url:defaultZone: http://localhost:10086/eureka # 地址信息
服务注册:
把user-service注册到EurekaServer下:
引入依赖
配置user-service的yml文件
server:port: 8081spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: 888888driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice # user服务名称mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: truelogging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSSeureka: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();}