当前位置:   article > 正文

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

springcloud nacos dubbo

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  1. 订单和库存微服务中,都要创建相同的业务接口(为dubbo远程调用准备的),和feign不同的是,feign框架基于被调用方提供controller(restful接口),而dubbo的使用是基于Service层的。订单微服务和库存微服务都要有StockService接口下的reduceStock方法。由于代码重复,也可以单独准备一个模块,只定义这些接口,然后让订单微服务和库存微服务都依赖这个模块。
public interface StockService {
	// 扣减库存
    public String reduceStock();
}
  • 1
  • 2
  • 3
  • 4
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  1. 编写测试接口
@RestController
public class OrderController {
    @DubboReference
    private StockService service;

    @GetMapping("/reduceStock")
    public String reduceStock(){
        String result = service.reduceStock();
        return result;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 测试,以下为nacos中的服务列表,用postman进行测试在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/773999
推荐阅读
相关标签
  

闽ICP备14008679号