Springcloudalibaba整合dubbo与nacos实现服务调用与负载均衡

1. 概述

dubbo是一款开源的rpc框架,用于微服务调用。相比更常见的feign,dubbo具有更好的性能,但在配置和使用过程中比feign稍微复杂一些。dubbo框架的使用方法不像feign这么固定,网上也有各种方案,本文基于Springcloudalibaba整合dubbo的方案,用nacos作为dubbo框架的注册中心。本文默认读者已经安装好了nacos服务端。

2. 使用方法

  1. 准备工作:准备两个微服务,订单微服务order,库存微服务stock,要实现的业务逻辑为,订单微服务通过dubbo远程调用库存微服务,实现库存的扣减。
  2. 父maven中配置依赖的版本管理、
    <dependencyManagement>
        <dependencies>
<!--            springboot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring cloud Netflix-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  1. 订单微服务和库存微服务都要导入以下依赖
<dependencies>
        <!--       web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos服务注册-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--        spring cloud alibaba整合dubbo-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!-- 不加这个依赖会报错 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version> 
        </dependency>
    </dependencies>
  1. 订单和库存微服务中,都要创建相同的业务接口(为dubbo远程调用准备的),和feign不同的是,feign框架基于被调用方提供controller(restful接口),而dubbo的使用是基于Service层的。订单微服务和库存微服务都要有StockService接口下的reduceStock方法。由于代码重复,也可以单独准备一个模块,只定义这些接口,然后让订单微服务和库存微服务都依赖这个模块。
public interface StockService {
	// 扣减库存
    public String reduceStock();
}
  1. 先明确个概念,订单微服务这样的调用方称为服务消费者consumer,库存微服务这样的被调用方称为服务提供者provider
  2. 在服务提供者库存微服务中,实现接口StockService,注解@DubboService表示类中的方法可以被服务消费者通过dubbo远程调用
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class StockServiceImpl implements StockService {

    @Override
    public String reduceStock() {
        return "服务提供方,扣减库存";
    }
}
  1. 服务提供者stock微服务的application.yml配置文件,一定要注意,nacos配置的命名空间和group在dubbo配置中的address以拼接的形式配置。
# 微服务端口号
server:
  port: 8087


# 微服务名称
spring:
  application:
    name: dubbo-provider-stock
  cloud:
    nacos:  # 配置nacos
      discovery:
        server-addr: http://192.168.40.129:8848/
        namespace: 6f53617b-d804-43f1-92c8-d71d3f3d0683
        group: myGroup
      config:
        enabled: true
dubbo:
  scan:
  	# 配置dubbo提供服务的包扫描,扫描被@DubboService注解配置的类
    base-packages: com.cabbage.service.impl
  protocol:  # 固定写法
    name: dubbo  
    port: -1
  registry:  # 配置dubbo使用nacos作为注册中心
    id: nacos
    address: nacos://192.168.40.129:8848?namespace=6f53617b-d804-43f1-92c8-d71d3f3d0683&group=myGroup
  1. 开始实现服务消费者订单微服务,application.yml配置文件(包含负载均衡的配置)
# 微服务名称
spring:
  application:
    name: dubbo-consumer-order
  cloud:
    nacos:
      discovery:
        server-addr: http://192.168.40.129:8848/
        namespace: 6f53617b-d804-43f1-92c8-d71d3f3d0683
        group: myGroup
      config:
        enabled: true
dubbo:
  protocol:
    name: dubbo
    port: -1
  registry:
    id: nacos
    address: nacos://192.168.40.129:8848?namespace=6f53617b-d804-43f1-92c8-d71d3f3d0683&group=myGroup
  cloud:
  	# 表示要订阅服务的服务名
    subscribed-services: dubbo-provider-stock
    # 实现负载均衡
  consumer:  # 服务消费者如何选择服务提供者
  	# 设置负载均衡算法为最短响应时间,在消费者端,Dubbo 将会选择当前响应时间最短的服务提供者来发送请求,以确保尽可能快速地获取服务响应。
    loadbalance: leastactive  
    # 以下被注释的配置为,以下被注释的配置为,在服务提供者端配置负载均衡策略,可以更灵活地控制服务提供者的负载情况,使得服务能够更有效地分配和利用资源。如果两个负载均衡不一样,以consumer为准
  # provider:  
    # loadbalance: leastactive 
  1. 编写测试接口
@RestController
public class OrderController {
    @DubboReference
    private StockService service;

    @GetMapping("/reduceStock")
    public String reduceStock(){
        String result = service.reduceStock();
        return result;
    }
}
  1. 测试,以下为nacos中的服务列表,用postman进行测试在这里插入图片描述
  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值