做网站网站刷单违法吗,网页设计与制作代码成品,网站建设 重庆,中国建筑装饰网图片2.服务拆分和远程调用
任何分布式架构都离不开服务的拆分#xff0c;微服务也是一样。
2.1.服务拆分原则
这里我总结了微服务拆分时的几个原则#xff1a;
不同微服务#xff0c;不要重复开发相同业务微服务数据独立#xff0c;不要访问其它微服务的数据库微服务可以将…2.服务拆分和远程调用
任何分布式架构都离不开服务的拆分微服务也是一样。
2.1.服务拆分原则
这里我总结了微服务拆分时的几个原则
不同微服务不要重复开发相同业务微服务数据独立不要访问其它微服务的数据库微服务可以将自己的业务暴露为接口供其它微服务调用 2.2.服务拆分示例
以课前资料中的微服务cloud-demo为例其结构如下 cloud-demo父工程管理依赖
order-service订单微服务负责订单相关业务user-service用户微服务负责用户相关业务
要求
订单微服务和用户微服务都必须有各自的数据库相互独立订单服务和用户服务都对外暴露Restful的接口订单服务如果需要查询用户信息只能调用用户服务的Restful接口不能查询用户数据库
2.2.1.导入Sql语句
首先将课前资料提供的cloud-order.sql和cloud-user.sql导入到mysql中 cloud-user表中初始数据如下 cloud-order表中初始数据如下 cloud-order表中持有cloud-user表中的id字段。
2.2.2.导入demo工程
用IDEA导入课前资料提供的Demo 项目结构如下 导入后会在IDEA右下角出现弹窗 点击弹窗然后按下图选择 会出现这样的菜单 配置下项目使用的JDK 2.3.实现远程调用案例
在order-service服务中有一个根据id查询订单的接口 根据id查询订单返回值是Order对象如图 其中的user为null
在user-service中有一个根据id查询用户的接口 查询的结果如图 2.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对象一起返回
2.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();}
}2.3.3.实现远程调用
修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法 2.4.提供者与消费者
在服务调用关系中会有两个不同的角色
服务提供者一次业务中被其它微服务调用的服务。提供接口给其它微服务
服务消费者一次业务中调用其它微服务的服务。调用其它微服务提供的接口 但是服务提供者与服务消费者的角色并不是绝对的而是相对于业务而言。
如果服务A调用了服务B而服务B又调用了服务C服务B的角色是什么
对于A调用B的业务而言A是服务消费者B是服务提供者对于B调用C的业务而言B是服务消费者C是服务提供者
因此服务B既可以是服务提供者也可以是服务消费者。