初识Dubbo及简单案例使用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 初识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 应用服务中间件
Spring Boot + Dubbo + Zookpeer分布式案例
Spring Boot + Dubbo + Zookpeer分布式案例
53 0
|
Dubbo Java 应用服务中间件
微服务技术系列教程(29) - Dubbo-介绍&环境安装&入门案例
微服务技术系列教程(29) - Dubbo-介绍&环境安装&入门案例
92 0
|
负载均衡 安全 Dubbo
深入浅出微服务:40个微服务架构实战案例(Dubbo+Springcloud)
微服务在近几年来可以说是十分火爆,我们应该知道微服务的发展历程大致分为6个阶段分别是:单体应用阶段提、垂直应用阶段、分布式系统阶段、服务治理阶段、微服务阶段、最后到服务网格阶段。
|
XML 缓存 负载均衡
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(下)
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(下)
157 1
|
Dubbo Java 应用服务中间件
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(中)
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(中)
514 0
|
存储 Dubbo Java
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(上)
Dubbo快速入门 —— 基于SpringBoot Starter 开发微服务应用案例 + 知识讲解(上)
469 0
|
Dubbo Java 应用服务中间件
Spring Boot + Dubbo + Zookpeer分布式案例
Spring Boot + Dubbo + Zookpeer分布式案例
|
Kubernetes Dubbo Cloud Native
Dubbo3开源标杆案例:中伦网络 Dubbo3 升级实践
> 阿里集团正全面从 HSF 迁移到 Dubbo3 体系,登陆网站了解详情 https://dubbo.apache.org/ 中伦网络在 2022 年完成了服务框架从 Dubbo2 到 Dubbo3 的全站升级,深度使用了应用级服务发现、Kubernetes 原生服务部署、服务治理等核心能力。来自中仑网络的技术负责人来彬彬对整个 Dubbo3 的选型、升级过程及收益等做了深入总结。 值得一提
339 0
Dubbo3开源标杆案例:中伦网络 Dubbo3 升级实践
|
监控 Dubbo 算法
【Dubbo】快速入门案例以及配置详情
【Dubbo】快速入门案例以及配置详情
201 0
【Dubbo】快速入门案例以及配置详情
|
Dubbo Cloud Native 应用服务中间件
ApacheCon Asia 2022 议题征集启动,欢迎报名分享 Dubbo3 实践案例
![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/f26ef59c-ea58-4e51-87ae-1eb579da52e6.png) ApacheCon 为面向全球的每年一届的开源盛会,通常举办地设在北美、欧洲,为了更好地服务于亚太快速增长的 Apache 用户和贡献者,自 2021 年开始启动了针对亚太地区的 Apac
236 1
ApacheCon Asia 2022 议题征集启动,欢迎报名分享 Dubbo3 实践案例
下一篇
无影云桌面