• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Dubbo服务调用实现

武飞扬头像
飞翔&的代码
帮助1

本文利用springCloudAlibaba实现dubbo分布式服务的调用。服务通过网关进行访问,注册中心采用阿里开原的nacos。

一、安装nacos

下载地址:https://nacos.io/zh-cn/docs/quick-start.html
安装方式有源码安装和jar包安装,我这里选择的是jar包的安装方式。

学新通
下载下来后,修改application.properties文件中的数据库连接。
学新通
修改启动脚本中的启动方式为单机启动,如果是windods,修改startup.cmd,如果是linux修改startup.sh启动脚本。

export SERVER="nacos-server"
export MODE="standalone"
export FUNCTION_MODE="all"
export MEMBER_LIST=""
export EMBEDDED_STORAGE=""
while getopts ":m:f:s:c:p:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
        c)
            MEMBER_LIST=$OPTARG;;
        p)
            EMBEDDED_STORAGE=$OPTARG;;
        ?)
        echo "Unknown parameter"
        exit 1;;
    esac
done
学新通

然后创建一个名为nacos的mysql数据库,将mysql脚本执行进去。
最后启动nacos服务,如果是windows,双击startup.cmd,如果是linux,执行startup.sh脚本。
启动成功界面如下所示:

学新通
账号密码是nacos/nacos

二、环境搭建

1、工程结构
学新通
其中,api-gateway是微服务调用的网关服务,dubbo-api是dubbo暴露的接口,dubbo-provider是服务提供者,dubbo-consumer是消费者。

2、依赖引入

api-gateway引入的依赖主要有:

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
学新通

dubbo-provider依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
学新通

dubbo-consumer引入的依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
学新通

3、注册中心配置

三个服务的注册配置是一样的,只是服务名和端口不一样,在这里列服务提供者的进行说明,但是在配置的时候三个服务都要配置。

spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public

4、dubbo配置

# dubbo 协议
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.port=20881
# Dubbo 消费端订阅服务端的应用名,多个服务提供者用逗号分隔
# 这里订阅"自己",会被忽略掉,请根据实际情况添加
dubbo.cloud.subscribed-services=dubbo-provider

5、网关配置

server:
  port: 3000
spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        enabled: true
    gateway:
      discovery:
        locator:
          enabled: true
        gateway:
      routes:
        - id: dubbo-consumer
          uri: lb://dubbo-consumer
          order: 1
          predicates:
            - Path=/consumer/**
          filters:
            - StripPrefix=1
学新通

三、创建服务

1、接口编写

在dubbo-api工程中创建一个接口,IHelloService

package com.example.dubbbo.dubbo;

/**
 * @author dongbaozhu
 */
public interface IHelloService {
    String sayHello(String name);
}

然后执行maven的clean命令,接着执行install安装相关依赖。

2、服务实现

package com.example.provider.dubbo;

import com.alibaba.dubbo.config.annotation.Service;
import com.example.dubbbo.dubbo.IHelloService;

/**
 * @author dongbaozhu
 */
@Service
public class IHelloServiceImpl implements IHelloService {

    @Override
    public String sayHello(String name) {
        return name;
    }
}
学新通

3、编写web接口

在dubbo- consumer工程中编写接口测试代码,创建一个controller,名为HelloController。代码如下:

package com.example.consumer.controller;

import com.example.dubbbo.dubbo.IHelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author dongbaozhu
 */
@RestController
public class HelloController {

    @DubboReference
    private IHelloService iHelloService;

    @GetMapping("/hello")
    public String hello(){
        return iHelloService.sayHello("hello");
    }
}
学新通

在dubbo-provider的启动类中加入@DubboComponentScan注解。主要是为了扫描dubbo服务提供者的包

@DubboComponentScan
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

四、测试接口

分别启动网关,服务提供者和服务消费者。启动成功后在nacos的服务列表中就会看到所注册的服务。

学新通
在浏览器中输入访问url:
http://127.0.0.1:3000/consumer/hello
然后会打印出服务提供者返回的信息。
学新通
调用关系:
请求从浏览器进来,然后通过网关路由服务消费者,接着消费者通过dubbo的形式调用服务提供者,服务提供者返回数据给消费者。消费者再将消息返回给前端。
最后附上源码地址:https://gitee.com/JasonDongbaozhu/dubbo-demo.git

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggfijg
系列文章
更多 icon
同类精品
更多 icon
继续加载