实用篇-服务拆分及远程调用
最佳答案 问答题库508位专家为你答疑解惑
一、服务拆分
服务拆分(也叫项目拆分)
注意事项:
- 不同的微服务,不要重复开发相同的业务
- 要求微服务之间数据独立,不要访问其他微服务的数据库
- 微服务可用将自己的业务暴漏为接口,供其他服务调用
1. Cloud-Demo拆分
首先有一个已经写好的项目工程,为cloud-demo.zip,需要把这个压缩包解压并导入进idea,然后就是根据功能来拆分这个项目。这个项目的原有结构如下:
cloud-demo是父工程,里面有两个模块是order-service、user-service,这俩模块分别的作用是根据id查询订单、根据id查询用户。这俩模块就是所谓的微服务,分是订单服务和用户服务
项目下载地址:https://download.csdn.net/download/m0_63732435/88475934
2. SQL导入
项目SQL文件下载地址:https://download.csdn.net/download/m0_63732435/88475940
3. IEDA导入项目
IDEA打开文件夹,然后连接数据库
启动服务,分别启动OrderApplication和UserApplication服务
然后访问接口
如果上述操作都成功,那么项目的准备工作就做好了。
可以看到,我们的项目有两个服务,分别是用户服务和订单服务,两个服务都遵循了微服务拆分的原则:单一职责,并且数据库也做了分离,每个服务的数据库都是分隔开的
下面将在这个Demo进行练习,如何正确使用微服务项目
二、服务远程调用
案例: 根据订单id查询订单功能
需求: 根据订单id查询订单的同时,把订单所属的用户信息一起返回
难点: 订单表、用户表在两个数据库,不是同一个数据库。订单业务、用户业务在两个项目,不是同一个项目
解决: 服务远程调用
1. 接口暴露
用户项目对外暴露了一个Restful接口,如下
@GetMapping("/{id}")
2. 发送请求
使用Spring提供的RestTemplate工具,作用是发送http请求
可以在订单项目使用Spring提供的RestTemplate工具,作用是发送http请求,也就是在订单项目向用户项目发送http请求,用户项目就会返回数据给订单项目
具体操作:
第一步: 在订单项目的OrderApplication引导类,添加如下
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);}/*** 创建RestTemplate并注入Spring容器* @return*/@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
第二步: 在订单项目的OrderService类,添加如下
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;import java.sql.PreparedStatement;@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);//2.利用RestTemplate发起http请求,查询用户//2.1 url路径String url = "http://localhost:8081/user/" + order.getUserId();//这个方法第一个参数是访问路径,第二个参数是把响应得到的Json数据封装成实体类对象User user = restTemplate.getForObject(url, User.class);//3.封装user到Orderorder.setUser(user);// 4.返回return order;}}
3. 测试
启动OrderApplication服务
访问刚才访问过的接口
可以看到响应回来的订单数据里面有对应关联的用户的相关信息
三、总结
跨服务的远程调用其实就是发送一次http请求,首先是在Spring容器里面注入RestTemplate对象,然后在你发送请求的类里面自动装配这个RestTemplate对象,并且在方法里面调用这个RestTemplate对象,第一个参数是路径,第二个参数是你想拿到什么类型的数据
99%的人还看了
相似问题
- UniApp项目中 使用微信小程序原生语言 进行开发
- 在PyCharm中正确设置Python项目
- 基于springboot实现班级综合测评管理系统项目【项目源码+论文说明】
- 合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
- 基于Springboot的美容院管理系统(有报告)。Javaee项目,springboot项目。
- 前后端分离项目跨域请求的问题与解决办法
- 普乐蛙VR航天航空巡展项目来到了第七站——绵阳科博会
- 计算机毕业设计选题推荐-家庭理财微信小程序/安卓APP-项目实战
- Springboot和Vue+MYSQL项目(基本介绍+前后端结合初步项目)+maven+mybatis
- ssm+vue的药店药品信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
猜你感兴趣
版权申明
本文"实用篇-服务拆分及远程调用":http://eshow365.cn/6-26127-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!