千家信息网

如何快速上手Dubbo

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,如何快速上手Dubbo,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。最近项目中需要用到dubbo,虽然我知道dubbo是一个RPC框
千家信息网最后更新 2026年11月04日如何快速上手Dubbo

如何快速上手Dubbo,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

最近项目中需要用到dubbo,虽然我知道dubbo是一个RPC框架,但是没有去详细了解这个框架。既然项目要用,那就先把Dubbo的应用给学会,等熟练使用之后,再去了解Dubbo内部的原理。

目前来说,Dubbo是最有名的RPC服务调用框架,他是阿里开源的一个SOA服务治理框架,功能较为完善,支持多种传输和序列化方案。Dubbo最常用的应用就是远程调用。

Dubbo中服务端最核心的对象有四个:

ApplicationConfig:配置当前应用信息

ProtocolConfig:配置提供服务的协议信息

RegistryConfig:配置注册相关信息

ServiceConfig:配置暴露的服务信息

Dubbo客户端中核心的对象有两个:

ApplicationConfig:配置当前应用信息

ReferenceConfig:配置引用的服务信息

(二)Dubbo实战

接下来通过三种方式入门Dubbo。首先会通过代码直接展示dubbo的直连和注册中心实现方式,接着使用Spring和SpringBoot的方式分别展示如何使用Dubbo。

在写dubbo相关代码前,我们首先要定义一个公共的客户端服务,这个服务里存放的是service接口。服务提供者引入这个工程,写实现类,提供dubbo接口;服务消费者引入这个工程,通过这个工程的service接口调用。

因此新建这样一个模块,命名为dubbo-client,整体代码结构如下,只需要写一个service接口即可:

User类:

@Datapublic class User implements Serializable {    private static final long serialVersionUID = -9206514891359830486L;    private Long id;    private String name;    private String sex;}

UserService:

public interface UserService {    User getUser(Long id);}

2.1 直接代码

接下来通过直接代码的方式生成一个dubbo服务,并且用另外一个类去调用这个dubbo服务:

2.1.1 引入依赖

核心依赖就两个,一个dubbo的依赖,另外一个上面的公共接口方法

            org.apache.dubbo        dubbo        2.7.4.1                dubbo-client        com.javayz        0.0.1-SNAPSHOT    

2.1.2 编写服务提供者

服务提供者主要配置以下几个属性:

1、application:设置应用的名称等信息

2、protocol :设置服务的协议

3、register:设置服务的连接方式

4、service:将需要暴露的服务注册出来

public class DubboProvider {    public static void main(String[] args) throws IOException {        //暴露UserService服务        //1、application        ApplicationConfig applicationConfig=new ApplicationConfig("sample-provider");        //2、protocol -dubbo协议        ProtocolConfig protocolConfig = new ProtocolConfig();        protocolConfig.setName("dubbo");        protocolConfig.setPort(20880);        //3、register        //直连的方式,不暴露到注册中心        RegistryConfig registryConfig=new RegistryConfig(RegistryConfig.NO_AVAILABLE);        //4、service        ServiceConfig serviceConfig=new ServiceConfig();        serviceConfig.setInterface(UserService.class);        serviceConfig.setRef(new UserServiceImpl());        //5、将application、protocol、register注册到service        serviceConfig.setRegistry(registryConfig);        serviceConfig.setProtocol(protocolConfig);        serviceConfig.setApplication(applicationConfig);        serviceConfig.export();        System.out.println("服务已经暴露");        System.in.read();    }}

2.1.3 编写服务消费者

消费者的实现主要就三步:

1、配置application:设置应用的名称等信息

2、配置reference:主要配置要引用的信息

3、获取到接口,调用服务。

public class DubboConsumer {    public static void main(String[] args) {        //1、application        ApplicationConfig applicationConfig=new ApplicationConfig("sample-consumer");        //2、配置reference        ReferenceConfig referenceConfig=new ReferenceConfig();        referenceConfig.setApplication(applicationConfig);        referenceConfig.setInterface(UserService.class);        referenceConfig.setUrl("dubbo://172.18.2.49:20880/com.javayz.client.service.UserService?anyhost=true&application=sample&bind.ip=172.18.2.49&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.javayz.client.service.UserService&methods=getUser&pid=5936&release=2.7.4.1&side=provider×tamp=1618036935244");        UserService userService = (UserService) referenceConfig.get();        User user = userService.getUser(1L);        System.out.println(user);    }}

先启动提供者,再启动消费者,如果user信息打印出来了就说明调用成功。

这里的Register使用的是直连的方式,我们也可以使用注册中心,这里以zookeeper为例。首先在项目中引入zookeeper相关依赖:

    org.apache.curator    curator-recipes    2.13.0    org.apache.curator    curator-framework    2.13.0

服务提供者修改一处地方,将RegistryConfig修改为zookeeper的连接方式

//register//直连的方式,不暴露到注册中心//RegistryConfig registryConfig=new RegistryConfig(RegistryConfig.NO_AVAILABLE);//通过注册中心暴露dubboRegistryConfig registryConfig=new RegistryConfig("zookeeper://192.168.78.128:2181");

消费者同样修改一处位置,将referenceConfig中的setUrl方法替换为zookeeper:

RegistryConfig registryConfig=new RegistryConfig("zookeeper://192.168.78.128:2181");ReferenceConfig referenceConfig=new ReferenceConfig();referenceConfig.setRegistry(registryConfig);referenceConfig.setApplication(applicationConfig);referenceConfig.setInterface(UserService.class);//referenceConfig.setUrl("dubbo://172.18.2.49:20880/com.javayz.client.service.UserService?anyhost=true&application=sample&bind.ip=172.18.2.49&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.javayz.client.service.UserService&methods=getUser&pid=5936&release=2.7.4.1&side=provider×tamp=1618036935244");

2.2 通过Spring

通过Spring的方式只不过是把上面写在Java中的代码拿到配置文件中去,并把接口注入到Bean容器中,在resource文件夹下新建两个配置文件: provider.xml

                                        

consumer.xml

            

这里的配置文件和上方的代码均一一对应。接着是服务的提供者和消费者: SpringDubboProvider

public class SpringDubboProvider {    public static void main(String[] args) throws IOException {        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("provider.xml");        System.out.println("服务已经暴露");        System.in.read();    }}

SpringDubboConsumer

public class SpringDubboConsumer {    public static void main(String[] args) {        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("consumer.xml");        UserService bean = context.getBean(UserService.class);        System.out.println(bean.getUser(1L));    }}

2.3 通过SpringBoot的方式

新建两个SpringBoot项目,一个是服务提供者,一个是服务消费者,引入dubbo的核心依赖

    org.apache.dubbo    dubbo-spring-boot-starter    2.7.4.1

这里的配置都写在application.properties中,首先是服务提供者:

dubbo.application.name=dubbo-providerdubbo.registry.address=zookeeper://192.168.78.128:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880

服务提供者需要写服务的实现类,这里需要注意@Service注解采用的是dubbo包下:

import com.javayz.client.entity.User;import com.javayz.client.service.UserService;import org.apache.dubbo.config.annotation.Service;import org.springframework.stereotype.Component;@Service@Componentpublic class UserServiceImpl implements UserService {    @Override    public User getUser(Long id) {        User user=new User();        user.setId(id);        user.setName("javayz");        user.setSex("man");        return user;    }}

接着在启动类上添加一个@EnableDubbo注解即可。

服务的消费者同样是先写一下配置文件:

server.port=8081dubbo.application.name=dubbo-consumerdubbo.registry.address=zookeeper://192.168.78.128:2181

接着通过@Reference注解将service对象引进来

@SpringBootApplicationpublic class SpringbootconsumerApplication {    @Reference    UserService userService;    public static void main(String[] args) {        SpringApplication.run(SpringbootconsumerApplication.class, args);    }    @Bean    public ApplicationRunner getBean(){        return args -> {            System.out.println(userService.getUser(1L));        };    }}

(三)dubbo的常用配置

 用于配置当前应用信息 用于配置连接注册相关信息 用于配置提供服务的协议信息,提供者指定协议,消费者被动接受 用于暴露一个服务,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值 当ReferenceConfig某属性没有配置时,采用此缺省值 用于创建一个远程服务代理

更加具体的配置信息我在官网中找到了,大家可参考:

https://dubbo.apache.org/zh/docs/v2.7/user/references/xml/

(四)企业中如何通过dubbo实现分布式调用

在企业中,如果消费者直接通过RPC去调用提供者,理论上需要把提供者的整个Jar包引入到项目中。但是这样的话服务提供这种的其他无关代码也会被引入其中,导致代码污染。

因此实际开发过程中,服务提供者和调用者之间会增加一层Client模块。这个Client中主要写的是Service的接口定义,接口的返回实例对象以及接口的请求实例对象。简单来讲,所有的定义都在Client中完成。

使用时,服务提供者引入这个Client,然后写实现方法,服务消费者引入这个Client,然后通过dubbo直接调用即可。

另外企业开发中,可能会出现多个接口实现,这种情况下可以给Service设定group、version等进行区分。

(五)总结

Dubbo的基本使用就这些,Dubbo毕竟只是一个RPC的工具,我们可以用它很方便地暴露、消费服务。但是两个小时也只是会上手使用,它内部的一些配置,一些理念以及最重要的原理都是需要我们自己去深耕的。

关于如何快速上手Dubbo问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

服务 配置 信息 提供者 消费 接口 方式 消费者 代码 应用 两个 对象 文件 项目 方法 核心 框架 企业 多个 属性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网属科技 互联网科技卖菜 深圳互联网科技公司 浩特互联网科技 华中科技大学互联网 长亮科技互联网金融 中国最先进互联网科技公司 青岛中康互联网医疗科技有限公司 深圳国际航运科技和互联网 中国的互联网科技企业的崛起 中国互联网有什么科技含量 银川新华互联网科技学校联系电话 互联网保险科技创业 互联网第三次科技革命特征 广东工业互联网大赛深圳学泰科技 本届互联网大会上的黑科技 江苏互联网科技小贷 九思连强互联网电子科技有限公司 互联网科技收购价值 安徽九吞吴互联网科技有限公司 广州紫鲸互联网科技 互联网科技公司有哪些 长亮科技 互联网金融 互联网科技视频素材 一五八零互联网科技 互联网校园科技培训 工业互联网展湾科技股份有限公司 北京互联网科技类企业分布 恒生科技指数 中概互联网 山东亿川互联网科技有限责任公司
0