微服务(2)
文章目录
- 微服务(2)
- 1. 服务拆分原则
- 2. 服务拆分示例
- 1.2.1 导入demo工程
- 1.2.2 导入Sql语句
- 3. 实现远程调用案例
- 1.3.1 案例需求:
- 1.3.2 注册RestTemplate
- 1.3.3 实现远程调用
- 1.3.4 查看效果
- 4. 提供者与消费者
本文将正式进入微服务框架SpringCloud和SpringCloudAlibaba的学习了,他们的工作就是微服务治理
任何分布式架构都离不开服务的拆分,微服务也是一样
服务拆分就是单个模块拆成多个模块,不过模块必须具有一定的独立性,这里我总结了微服务拆分时的几个原则:
以本链接的项目示例:资源/cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)
这么一个简单的微服务cloud-demo为例,其结构如下:
cloud-demo:父工程,管理依赖
这样模拟出微服务的效果,满足以下要求:
网络资料:
项目结构如下:
多个应用/多个微服务运行的界面设置(这样可以更好的观察和操作)
添加运行的类型:
等待pom.xml加载完毕,项目可以尝试启动:
选中父目录,ctrl shift f10运行(这是默认的,如果你改了就是你改的运行快捷键,或者点绿色小三角),就是运行全部服务,如果选中对应的微服务运行就是运行对应的微服务~
同理,快捷键ctrl f2停止运行
cloud-user表中初始数据如下:
cloud-order表中初始数据如下:
cloud-order表中持有cloud-user表中的id字段。
(注意改yml文件的数据库连接配置哦!)
(重启两个微服务)
在order-service服务中,有一个根据id查询订单的接口:
根据id查询订单,返回值是Order对象,如图:
在user-service中有一个根据id查询用户的接口:
查询的结果如图:
端口与订单服务不一样哦,解耦合~
order-service中的根据id查询订单业务:
我们通过查询到的订单信息的用户id,想要查询用户信息(在这里不会重复开发用户模块的功能,并且订单模块不能直接查询用户模块的数据库),就要访问用户服务暴露的接口
我们需要在order-service中 向user-service发起一个http的请求,调http://localhost:8081/user/{userId}这个接口。
大概的步骤是这样的:
而这是我们未曾尝试过的,但是我们会有这个想法(就像浏览器js的ajax发送http请求一样),事实上在SpringCloud框架中就是支持这种 “后端给后端发http请求” 的!
首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:
修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:
重启微服务,浏览器访问订单服务:
在服务调用关系中,会有两个不同的角色:
服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)
但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。
如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?
那么这个身份是 相对而言 的~
因此,在不同的业务下,服务B既可以是服务提供者,也可以是服务消费者
文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭!代码:cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)