当前位置: 首页 > news >正文

微服务服务拆分和远程调用

一、服务架构比较

  • 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统

  • 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝

  • 微服务:一种良好的分布式架构方案

    ①优点:拆分粒度更小、服务更独立、耦合度更低

    ②缺点:架构非常复杂,运维、监控、部署难度提高

  • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

二、服务拆分原则 

  • 不同微服务,不要重复开发相同业务

  • 微服务数据独立,不要访问其它微服务的数据库

  • 微服务可以将自己的业务暴露为接口,供其它微服务调用

三、实现远程调用 

3.3.1 案例分析

修改order-service中的根据id查询订单业务,要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。

3.3.2 注册RestTemplate

  首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:

package cn.itcast.order;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}

3.3.3 修改服务 

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:

package cn.itcast.order.service;import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);//2.利用RestTemplate发起http请求,查询用户String url = "http://localhost:8081/user/"+order.getUserId();User user = restTemplate.getForObject(url, User.class); //自动反序列化//封装user到Orderorder.setUser(user);//4.返回return order;}
}

 

http://www.lryc.cn/news/115087.html

相关文章:

  • MySQL8.1源码安装与部署
  • algebraic reconstruction technique(ART)
  • oracle11g安装
  • 网络防御(9)
  • Spring核心与设计思想
  • 【stream的使用】使用stream.filter过滤List对象
  • Flink多流处理之connect拼接流
  • 对任意类型数都可以排序的函数:qsort函数
  • vue数据更新table内容不更新解决方法
  • 合宙Air724UG LuatOS-Air script lib API--record
  • 基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
  • Java分布式微服务3——Docker
  • js字符串替换
  • 网络防御(2)
  • [RCTF2019]DontEatMe
  • 6. CSS(三)
  • 计算机网络—HTTP
  • Tomcat线程池原理
  • 踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题
  • 【设计模式】-装饰器模式
  • 七月学习总结
  • Camunda 7.x 系列【6】Spring Boot 集成 Camunda 7.19
  • Kubernetes —调度器配置
  • 【微信小程序】申请蓝牙、位置和数据库等相关权限
  • ORB-SLAM2学习笔记6之D435i双目IR相机运行ROS版ORB-SLAM2并发布位姿pose的rostopic
  • 【数据结构与算法——TypeScript】哈希表
  • JavaScript 中常用简写语法技巧总结
  • 漫画算法做题笔记
  • JDBC学习笔记
  • 亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升