任何分布式架构都离不开服务的拆分,微服务也是一样。
一、服务拆分原则
微服务拆分时的几个原则:
-
不同微服务,不要重复开发相同业务
-
微服务数据独立,不要访问其它微服务的数据库
-
微服务可以将自己的业务暴露为接口,供其它微服务调用
二、服务拆分示例
以微服务cloud-demo为例,其结构如下:
cloud-demo:父工程,管理依赖
-
order-service:订单微服务,负责订单相关业务
-
user-service:用户微服务,负责用户相关业务
要求:
-
订单微服务和用户微服务都必须有各自的数据库,相互独立
-
订单服务和用户服务都对外暴露Restful的接口
-
订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库
2.1 导入Sql语句
首先,将资料提供的cloud-order.sql
和cloud-user.sql
导入到mysql中:
cloud-user表中初始数据如下:
cloud-order表中初始数据如下:
cloud-order表中持有cloud-user表中的id字段。
2.2 导入demo工程
用IDEA导入资料提供的Demo:
项目结构如下:
导入后,会在IDEA右下角出现弹窗:
点击弹窗,然后按下图选择:
会出现这样的菜单:
配置下项目使用的JDK:
三、实现远程调用案例
在order-service服务中,有一个根据id查询订单的接口:
根据id查询订单,返回值是Order对象,如图:
其中的user为null
在user-service中有一个根据id查询用户的接口:
查询的结果如图:
3.1 案例需求:
修改order-service中的根据id查询订单业务,要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回。
因此,我们需要在order-service中 向user-service发起一个http的请求,调用http://localhost:8081/user/{userId}这个接口。
大概的步骤是这样的:
-
注册一个RestTemplate的实例到Spring容器
-
修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User
-
将查询的User填充到Order对象,一起返回
3.2 注册RestTemplate
首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:
在Spring Boot中,RestTemplate是一个常用的类,用于发送HTTP请求和接收响应。它是Spring框架的一部分,提供了简单而强大的RESTful Web服务客户端。
RestTemplate的主要功能包括:
- 发送HTTP请求:RestTemplate提供了多种HTTP方法,如GET、POST、PUT、DELETE等,可以轻松地发送请求到指定的URL。
- 解析响应:RestTemplate可以将HTTP响应中的数据解析为Java对象,使得数据交互更加方便。
- 设置请求参数:可以通过RestTemplate设置请求参数,如查询参数、请求头等,以定制化请求。
- 异常处理:当请求失败时,RestTemplate会抛出异常,可以通过捕获这些异常来进行异常处理。
在Spring Boot中,RestTemplate的使用通常通过注入的方式将其注入到需要使用它的类中,然后调用相应的方法发送HTTP请求。需要注意的是,随着Spring Framework的不断更新,RestTemplate可能会被其他更现代的类或库所取代。尽管如此,对于许多现有的Spring Boot项目来说,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);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
3.3 实现远程调用
修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:
文章来源:https://www.toymoban.com/news/detail-807187.html
文章来源地址https://www.toymoban.com/news/detail-807187.html
到了这里,关于微服务-服务拆分和远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!