初识Dubbo及简单案例使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 初识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>



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先启动:



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



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


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




报错解决


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

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


1.@DubboService 注解要加入vrsion版本号
2.缺少jar包
3.生产者&消费者服务结构目录一致
4.生产者的Dubbo port端口号问题
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
Dubbo Java 应用服务中间件
微服务技术系列教程(29) - Dubbo-介绍&环境安装&入门案例
微服务技术系列教程(29) - Dubbo-介绍&环境安装&入门案例
54 0
|
10月前
|
负载均衡 安全 Dubbo
深入浅出微服务:40个微服务架构实战案例(Dubbo+Springcloud)
微服务在近几年来可以说是十分火爆,我们应该知道微服务的发展历程大致分为6个阶段分别是:单体应用阶段提、垂直应用阶段、分布式系统阶段、服务治理阶段、微服务阶段、最后到服务网格阶段。
|
11月前
|
XML 缓存 负载均衡
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(下)
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(下)
122 1
|
11月前
|
Dubbo Java 应用服务中间件
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(中)
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(中)
349 0
|
11月前
|
存储 Dubbo Java
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(上)
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(上)
271 0
|
Dubbo Java 应用服务中间件
Spring Boot + Dubbo + Zookpeer分布式案例
Spring Boot + Dubbo + Zookpeer分布式案例
|
Dubbo Java 应用服务中间件
Springboot优雅整合Dubbo完成分布式服务注册案例
Springboot优雅整合Dubbo完成分布式服务注册案例
91 0
|
监控 Dubbo 算法
【Dubbo】快速入门案例以及配置详情
【Dubbo】快速入门案例以及配置详情
166 0
【Dubbo】快速入门案例以及配置详情
|
Dubbo Java 应用服务中间件
SpringBoot——借助Maven多模块管理实现集成SSM、Dubbo、Thymeleaf的汇总案例
SpringBoot——借助Maven多模块管理实现集成SSM、Dubbo、Thymeleaf的汇总案例
SpringBoot——借助Maven多模块管理实现集成SSM、Dubbo、Thymeleaf的汇总案例
|
NoSQL Dubbo Java
SpringBoot——SpringBoot集成SSM、Dubbo、Redis、JSP的汇总案例
SpringBoot——SpringBoot集成SSM、Dubbo、Redis、JSP的汇总案例
SpringBoot——SpringBoot集成SSM、Dubbo、Redis、JSP的汇总案例