目录
一、基本简介
二、基础实现
1. 提供统⼀业务api
2. 编辑服务提供者product
3. 编辑服务消费者order
4. 服务调⽤测试
一、基本简介
Dubbo是阿⾥巴巴开源的基于 Java 的⾼性能 RPC分布式服务框架,致⼒于提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案。 Spring Cloud Alibaba微服务开发框架集成了Dubbo,可实现微服务对外暴露Dubbo协议的接⼝,Dubbo协议相⽐RESTful协议速度更快RPC:RPC是远程过程(Remote Procedure Call)的缩写形式,调⽤RPC远程⽅法就像调⽤本地⽅法⼀样,Dubbo之前阿⾥研发,中间停⽌维护2年,最后开启维护并捐献给Apachedubbo官⽹:http://dubbo.io/ 以上是 Dubbo 的⼯作原理图,从抽象架构上分为两层: 服务治理抽象控制⾯ 和 Dubbo 数据⾯ 。
- 服务治理控制⾯:服务治理控制⾯不是特指如注册中⼼类的单个具体组件,⽽是对 Dubbo 治理体系的抽象表达。控制⾯包含协调服务发现的注册中⼼、流量管控策略、Dubbo Admin 控制台等,如果采⽤了 Service Mesh 架构则还包含 Istio 等服务⽹格控制⾯。
- Dubbo 数据⾯:数据⾯代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应⽤开发与调⽤规范并负责完成数据传输的编解码⼯作。
- 服务消费者 (Dubbo Consumer),发起业务调⽤或 RPC 通信的 Dubbo 进程
- 服务提供者 (Dubbo Provider),接收业务调⽤或 RPC 通信的 Dubbo 进程
二、基础实现
基于前面的代码实现
1. 提供统⼀业务api
/*** @author zkt* @Version 1.0* @since 2024/7/26*/import com.zkt.domain.Product;/**实战中,会将所有服务接口设计给一个叫做api的服务,单独维护,此处就在common服务设置*/ public interface IProductService {Product findByPid(Integer pid); }
注意 :product 一定要实现 Serializable 接口
2. 编辑服务提供者product
添加依赖<!-- dubbo --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency>
添加dubbo配置
server:port: 8081 spring:application:name: service-productdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=trueusername: rootpassword: 123456cloud:nacos:discovery:server-addr: 127.0.0.1:8848dubbo:scan:base-packages: com.zkt.service.impl # 开启包扫描protocols:dubbo:name: dubbo # 服务协议port: -1 # 服务端⼝ 使⽤随机端⼝registry:address: spring-cloud://localhost # 注册中⼼
编写并暴露服务
/*** @author zkt* @Version 1.0* @since 2024/7/26*/ //暴露服务:注意这里使用的是dubbo提供的注解@Service,而不是Spring的 @Service public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService,IService<Product> {@AutowiredProductMapper productMapper;@Overridepublic Product findByPid(Integer pid) {return productMapper.selectById(pid);} }
或者直接删除 这里我就删了要不然service 会冲突
3. 编辑服务消费者order
添加依赖<!-- dubbo --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency>
添加dubbo配置 配置yml
server:port: 8091 spring:application:name: service-orderdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=trueusername: rootpassword: 123456cloud:nacos:discovery:server-addr: 127.0.0.1:8848logging:level:com.zkt: debug#feign: # client: # config: # default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置 # loggerLevel: FULL # 日志级别 # httpclient: # enabled: true # 开启feign对HttpClient的支持 # max-connections: 200 # 最大的连接数 # max-connections-per-route: 50 # 每个路径的最大连接数 dubbo:registry:address: spring-cloud://localhost # 注册中⼼cloud:subscribed-services: service-product # 订阅的提供者名称
引⽤服务/*** @author zkt* @Version 1.0* @since 2024/7/25*/ @RestController public class OrderController {//引用服务@Referenceprivate IProductService productService;@Autowiredprivate IOrderService orderService;@RequestMapping("/order/prod/{pid}")public Order order(@PathVariable("pid") Integer pid) {//通过dubbo调用商品微服务Product product = productService.findByPid(pid);//下单(创建订单)Order order = new Order();order.setUid(2);order.setUsername("测试用户zkt");order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);return order;}}