微服務
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: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();}