Dubbon-微服务通信(基本简介 基础实现)

目录

一、基本简介

二、基础实现  

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年,最后开启维护并捐献给Apache
dubbo官⽹:
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-product
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

dubbo:
  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> {

    @Autowired
    ProductMapper productMapper;

    @Override
    public 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-order
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

logging:
  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 {

    //引用服务
    @Reference
    private IProductService productService;

    @Autowired
    private 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;
    }


}

4. 服务调⽤测试  

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯诺依曼转世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值