初识Dubbo及简单案例使用

举报
长路 发表于 2022/11/28 20:19:21 2022/11/28
【摘要】 所有博客文件目录索引:博客目录索引(持续更新)dubbo-github地址Dubbo架构图和Dubbo执行流程创建一个Maven项目:引入相关依赖 : : : : : 测试:首先启动provider中的application首先进行注册,接着再执行client进行调用获取ip地址来进行RPC调用provider先启动:此时我们来观察zookeeper:①可以看到上图启动图当红色框以及依据dubbo

@[toc]

前言

所有博客文件目录索引:博客目录索引(持续更新)

资料

dubbo-github地址

Dubbo架构图和Dubbo执行流程

初次接触Dubbo—简单案例

参考官网仓库代码案例:dubbo-samples-api

创建一个Maven项目:引入相关依赖

<properties>
    <spring.version>4.3.16.RELEASE</spring.version>
    <dubbo.version>3.0.7</dubbo.version>
</properties>

<dependencies>
    <!--   Spring依赖     -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>${spring.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <!--    Dubbo依赖    -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!--    Dubbo相关的zookeeper依赖     -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

image-20220605211753514

api/UserService.java

import com.changlu.pojo.User;

/**
 * @ClassName UserService
 * @Author ChangLu
 * @Date 6/5/2022 8:42 PM
 * @Description 用户业务接口
 */
public interface UserService {
    
    User getUserById(Integer id);
    
}

client/Application.java

import com.changlu.api.UserService;
import com.changlu.pojo.User;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;

/**
 * @ClassName Application
 * @Author ChangLu
 * @Date 6/5/2022 8:44 PM
 * @Description 客户端应用
 */
public class Application {

    private static String zookeeperHost = System.getProperty("zookeeper.address", "192.168.10.40");
    private static String zookeeperPort = System.getProperty("zookeeper.port", "2181");

    public static void main(String[] args) {
        ReferenceConfig<UserService> reference = new ReferenceConfig<>();
        reference.setApplication(new ApplicationConfig("first-dubbo-consumer"));
        reference.setRegistry(new RegistryConfig(
                "zookeeper://" + zookeeperHost + ":" + zookeeperPort));
        reference.setInterface(UserService.class);
        //获取到一个代理类
        UserService service = reference.get();
        //进行远程调用
        User user = service.getUserById(123);
        System.out.println(user);
    }

}

pojo/User.java

import java.io.Serializable;

/**
 * @ClassName User
 * @Author ChangLu
 * @Date 6/5/2022 8:40 PM
 * @Description 用户类
 */
public class User implements Serializable {

    private String name;
    private String sex;
    private Integer age;

    public User(String name, String sex, Integer age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}

provider/UserServiceImpl.java

import com.changlu.api.UserService;
import com.changlu.pojo.User;

/**
 * @ClassName UserServiceImpl
 * @Author ChangLu
 * @Date 6/5/2022 8:46 PM
 * @Description 用户实现类
 */
public class UserServiceImpl implements UserService {
    
    @Override
    public User getUserById(Integer id) {
        return new User("changlu", "男", 18);
    }
    
}

provider/Application.java

import com.changlu.api.UserService;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;

import java.util.concurrent.CountDownLatch;

/**
 * @ClassName Application
 * @Author ChangLu
 * @Date 6/5/2022 8:47 PM
 * @Description 生产者
 */
public class Application {

    private static String zookeeperHost = System.getProperty("zookeeper.address", "192.168.10.40");
    private static String zookeeperPort = System.getProperty("zookeeper.port", "2181");

    public static void main(String[] args) throws InterruptedException {
        ServiceConfig<UserService> service = new ServiceConfig<>();
        //当前服务的应用名
        service.setApplication(new ApplicationConfig("first-dubbo-provider"));
        //指定注册地址
        service.setRegistry(new RegistryConfig(
                "zookeeper://" + zookeeperHost + ":" + zookeeperPort)
        );
        //设置相应服务的接口以及对应实例
        service.setInterface(UserService.class);
        service.setRef(new UserServiceImpl());
        //进行一个注册
        service.export();

        //阻塞
        System.out.println("dubbo service started");
        new CountDownLatch(1).await();
    }
}

测试:首先启动provider中的application首先进行注册,接着再执行client进行调用获取ip地址来进行RPC调用

  • 这里是以zookeeper作为注册中心。

provider先启动:

image-20220605213247983

此时我们来观察zookeeper:①可以看到上图启动图当红色框以及依据dubbo service started执行时对应zookeeper中出现了/dubbo结点,在/dubbo下有两个结点一个是configurators、providers,在provides结点中包含了一长串的一个url信息(也就是初始提供服务端发送的url信息)。②上面窗口执行黄色框时,此时zookeeper出现了/services,我们查看该结点,在该结点下包含了对应的服务名的一个ip地址。

image-20220605213210393

client启动:调用提供服务的接口,这里我放两个截图

  • 第一张图我猜测首先肯定会去读缓存看是否有对应服务的一个地址,若是有直接就进行RPC调用,没有的话就会去注册中心获取相应服务的ip地址与端口(很明显这里就是去注册中心获取了,rpc调用结束后会响应返回一个结果值)

image-20220605213909191

image-20220605213959243

报错解决

1、启动Dubbo服务Injection of @DubboReference dependencies is failed

启动Dubbo服务Injection of @DubboReference dependencies is failed

1.@DubboService 注解要加入vrsion版本号
2.缺少jar包
3.生产者&消费者服务结构目录一致
4.生产者的Dubbo port端口号问题
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。