B011-springcloud alibaba rpc通信 Dubbo

目录

介绍

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC分布式服务框架,致力于提供高性能和透明化的 RPC远程服务调用方案,以及SOA服务治理方案。

Spring-cloud-alibaba-dubbo 是基于SpringCloudAlibaba技术栈对dubbo技术的一种封装,目的在于实现基于RPC的服务调用。

实现

提供统一业务api

在shop-common中ProductService,商品与订单服务都会调用它

java 复制代码
public interface ProductService {
    Product findByPid(Integer pid);
}

shop-common的实体类都实现序列化接口

服务提供者
1.导入依赖
xml 复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
2添加dubbo配置
yml 复制代码
dubbo:
  scan:
    base-packages: com.itheima.service.impl # 开启包扫描,使暴漏接口注解能被扫描到
  protocols:
    dubbo:
      name: dubbo # 服务协议
      port: -1 # 服务端口 不限制的意思
  registry:
    address: spring-cloud://localhost # 注册中心 会注册到nacos
3编写并暴露服务
java 复制代码
//暴露服务 注意这里使用的是dubbo提供的注解@Service,而不是Spring的
@Service
public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductDao productDao;

    @Override
    public Product findByPid(Integer pid) {
        return productDao.findById(pid).get();
    }
}
服务消费者
1.导入依赖
xml 复制代码
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
2添加dubbo配置
yml 复制代码
dubbo:
  registry:
    address: spring-cloud://localhost # 注册中心
  cloud:
    subscribed-services: service-product  # 订阅的提供者名称
3引用服务
java 复制代码
@RestController
@Slf4j
public class OrderController {

    @Autowired
    private OrderService orderService;

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

    @RequestMapping("/order/prod/{pid}")
    public Order order(@PathVariable Integer pid) {
        log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", pid);

        //调用商品微服务,查询商品信息
        Product product = productService.findByPid(pid);
        log.info("查询到{}号商品的信息,内容是:{}", pid, JSON.toJSONString(product));

        //下单(创建订单)
        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);
        log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));

        return order;
    }

}
测试

先启动服务提供者,再启动服务消费者,然后浏览器访问测试

相关推荐
曼巴UE51 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
Rain的Java大神之路2 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
需要8262 天前
MySQL 索引 B+ 树与“查询为什么变慢了
java·spring boot·spring·spring cloud·tomcat
需要8262 天前
Arthas 一个命令排查线上问题
java·jvm·spring·spring cloud
代码小学僧2 天前
从 0 到 1,记录我的第一个出海 SaaS 独立开发项目
前端·rpc·音视频开发
苏渡苇3 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
叶总没有会3 天前
Nacos—注册中心
spring cloud·微服务
苏渡苇4 天前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring·spring cloud·系统监控·apm
叶总没有会4 天前
微服务--分布式基础
java·spring·spring cloud·微服务
孙启超5 天前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust