长春住房和城乡建设部官方网站,口碑营销什么意思,logo在线设计生成器下载,wordpress在php下安装教程微服务使用指南
1.初识微服务
微服务可以认为是一种分布式架构的解决方案#xff0c;提供服务的独立性和完整性#xff0c;做到服务的高内聚、低耦合。
目前服务架构主要包含#xff1a;单体架构和分布式架构。
1.1 单体架构
单体架构#xff1a;把所有业务功能模块都…微服务使用指南
1.初识微服务
微服务可以认为是一种分布式架构的解决方案提供服务的独立性和完整性做到服务的高内聚、低耦合。
目前服务架构主要包含单体架构和分布式架构。
1.1 单体架构
单体架构把所有业务功能模块都放在一个项目中进行开发打成一个包部署。
优点架构简单、易部署
缺点功能模块耦合度高升级维护困难
1.2 分布式架构
分布式架构将系统中每个业务功能模块作为独立项目进行开发分开进行部署每个项目称为一个服务。
优点耦合度低、有利于功能模块升级与维护
缺点架构复杂、部署有一定难度
2.微服务特点
独立职责每个服务对应一个业务功能职责独立自治因为每个服务都是一个独立项目因此可以根据技术背景让不同的团队开发不同的服务每个服务有自己的数据库开发完成后进行独立部署实现团队独立、技术独立、数据自治、独立部署与运行面向服务服务提供统一标准的接口与外界进行交互与语言和技术无关隔离性强服务之间都是独立的只能通过统一接口进行访问隔离性强
3.微服务框架-SpringCloud
全球各地的互联网公司都在寻求可以落地的微服务方案目前国内使用最广泛的微服务框架还是SpringCloud官网地址https://spring.io/projects/spring-cloud。SpringCloud集成了各种微服务功能组件并基于SpringBoot实现了这些组件的自动装配从而提供了良好的开箱即用体验。 注SpringCloud底层是依赖于SpringBoot的并且有版本的兼容关系 4.服务拆分与远程调用
4.1 服务拆分
任何分布式架构方案都需要考虑服务拆分的问题
服务拆分的粒度如何确定不同服务之间如何调用不同服务之间调用关系如何管理
微服务进行服务拆分的原则
不同的微服务不重复开发相同的业务微服务数据库独立不能去访问其它微服务的数据库微服务可以将自己的业务接口暴露出来供其它微服务使用
例现在要开发两个微服务支付微服务和订单微服务支付微服务中需要用到订单微服务中的数据 支付微服务和订单微服务是两个完全不同的业务不能包含相同的业务 支付微服务和订单微服务都需要有自己的数据库支付微服务不能访问订单微服务的数据库 支付微服务和订单微服务都可以暴露自己的Restful接口供其它微服务使用支付微服务可以通过访问订单微服务暴露的接口去获得数据
在服务的调用关系中有两个不同的角色
服务调用者业务中访问其它微服务的服务称为服务调用者就是一个服务去访问其它微服务暴露的业务接口
服务提供者业务中被其它微服务访问的服务称为服务提供者就是一个服务暴露业务接口供其它微服务访问
服务调用者和服务提供者的角色并不是绝对的是相对与业务而言的一个微服务既可以是服务调用者也可以是服务提供者
4.2 远程调用
实现微服务之间的调用最开始的方式可以使用注册RestTemplate实例的方式RestTemplate是用于服务之间远程通信的一个类以上文提到的支付微服务和订单微服务为例支付微服务中需要用到订单微服务中的数据。步骤如下
注册RestTemplate到容器到支付微服务的Spring中
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;SpringBootApplication
public class PayApplication {public static void main(String[] args) {SpringApplication.run(PayApplication.class, args);}Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}在支付微服务的业务方法中使用RestTemplate向订单微服务发起请求
一般是在支付微服务的service层代码中步骤如下
注入RestTemplate对象定义url,包括订单微服务的ip、端口、访问接口、访问参数调用RestTemplate的getForObject对象进行结果的解析和封装 Autowiredprivate RestTemplate restTemplate; String url http://127.0.0.1:8080/order/id;Order order restTemplate.getForObject(url, Order.class);String url http://127.0.0.1:8080/order/id;
Order order restTemplate.getForObject(url, Order.class);