福建老区建设网站,威海经区建设局网站,免费做电子请帖的网站,做视频投稿赚钱的网站目录 前言
RPC思想
为什么使用Dubbo Dubbo技术框架
编辑
调用关系流程 基础实现
A.提供统一业务Api B.编辑服务提供者Product
B.a 添加依赖
B.b 添加Dubbo 配置(基于yaml配置文件)
B.c 编写并暴露服务
C.编辑服务消费者
C.a 添加依赖
C.b 添加Dubbo配置
C.c 引用…目录 前言
RPC思想
为什么使用Dubbo Dubbo技术框架
编辑
调用关系流程 基础实现
A.提供统一业务Api B.编辑服务提供者Product
B.a 添加依赖
B.b 添加Dubbo 配置(基于yaml配置文件)
B.c 编写并暴露服务
C.编辑服务消费者
C.a 添加依赖
C.b 添加Dubbo配置
C.c 引用服务 前言
Dubbo是基于Java的RPC分布式服务框架主要用于提高性能和实现透明化的RPC远程服务调用以及SOA服务治理方案。简单来说Dubbo就是一个用于分布式场景下实现远程调用的服务框架当然Dubbo不只这个一个功能这只是其中之一它的核心模块还包括集群容错和自动发现等。
RPC思想
rpc全称Remote Procedure Call 即远程过程调用是一种进程间的通信方式或者说是一种思想用于解决不同服务器键的进程调用。 上图是RPC的调用流程图具体的过程在Dubbo框架时会再介绍。对于上图中的关键点有两个一个是建立连接另一个是序列化和反序列化。
为什么说这两个是关键的地方呢这是由于在分布式服务架构中服务的调用基于网络传递这时数据就需要进行序列化和反序列化的操作因此服务器的性能也就取决于我们选择的RPC框架是否能够迅速的建立连接和实现序列化、反序列化。 为什么使用Dubbo
Dubbo可以讲核心的业务抽离出来作为独立的服务形成稳定的服务中心以实现代码的灵活复用和拓展。Dubbo的配置方式对应用没有任何侵入做到了透明化接入应用只需要Spring加载Dubbo配置即可再分布式架构下可以承担更大规模的流量并发 Dubbo技术框架 节点说明
节点说明Provider服务提供者Consumer服务消费者Registry服务注册(发现)中心Moniter服务监控中心(统计调用次数和调用时间)Container服务运行容器
调用关系流程
1、服务容器负责启动加载运行服务提供者 2、服务提供者在启动时向注册中心注册自己提供的服务 3、服务消费者在启动时向注册中心订阅自己所需的服务 4、注册中心返回服务提供者地址列表给消费者 5、服务消费者基于负载均衡算法从提供者地址列表中选择一位提供者进行调用如果调用失败再选另一位调用。 6、服务消费者和提供者在内存中累计调用次数和调用时间定时每分钟发送一次统计数据到监控中心。 基础实现
A.提供统一业务Api
/**
实战中会将所有服务接口设计给一个叫做api的服务单独维护此处就在common服务设置*/public interface IProductService {Product findByPid(Integer pid);} B.编辑服务提供者Product
B.a 添加依赖
!--dubbo--
dependencygroupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-dubbo/artifactId
/dependency
B.b 添加Dubbo 配置(基于yaml配置文件)
dubbo: scan: base-packages: com.apesource.service.impl # 开启包扫描protocols: dubbo: name: dubbo # 服务协议 port: -1 # 服务端口 使用随机端口registry: address: spring-cloud://localhost # 注册中心
B.c 编写并暴露服务
//暴露服务:注意这里使用的是dubbo提供的注解Service,而不是Spring的
Service public class ProductServiceImpl implements ProductService {Autowired private ProductDao productDao; Overridepublic Product findByPid(Integer pid) {return productDao.findById(pid);}}
C.编辑服务消费者
C.a 添加依赖
!--dubbo--
dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-dubbo/artifactId
/dependency
C.b 添加Dubbo配置
dubbo: registry: address: spring-cloud://localhost # 注册中心cloud: subscribed-services: service-product # 订阅的提供者名称
C.c 引用服务 RestController public class OrderController {Autowired private OrderService orderService; //引用服务 Reference private IProductService productService; RequestMapping(/order/prod/{pid}) public Order order(PathVariable Integer pid) { System.out.println(接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息pid); //调用商品微服务,查询商品信息Product product productService.findByPid(pid); //下单(创建订单) Order order new Order(); order.setUid(1); order.setUsername(测试用户);order.setPid(pid);order.setPname(product.getPname()); order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);System.out.println(创建订单成功,订单信息为{}JSON.toJSONString(order));return order;} }