Dubbo加标签方式

Dubbo 3.x 强烈推荐使用注解方式,但 XML 配置方式依然被广泛支持和理解。


一、XML 配置方式中的标签

这是在传统 Spring 应用中集成 Dubbo 服务最经典的方式。你需要在 applicationContext.xmldubbo-provider.xml/ dubbo-consumer.xml等配置文件中使用这些标签。

首先,必须引入 Dubbo 的 XML 命名空间(Namespace):

复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" <!-- 关键:dubbo命名空间 -->
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://dubbo.apache.org/schema/dubbo <!-- 关键:dubbo的schema -->
        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
常用核心标签:
  1. ​**<dubbo:application/>**​

    • 作用​:配置当前 Dubbo 应用的基本信息。

    • 必加​:是。

    • 示例​:

      复制代码
      <dubbo:application name="your-app-name"/>
  2. ​**<dubbo:registry/>**​

    • 作用​:配置注册中心地址。Dubbo 服务会注册到这里,消费者从这里发现服务。

    • 必加 ​:是(除非使用直连方式,用 url属性)。

    • 示例​(使用 Nacos):

      复制代码
      <dubbo:registry address="nacos://127.0.0.1:8848"/>
    • 示例​(使用 Zookeeper):

      复制代码
      <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
  3. ​**<dubbo:protocol/>**​

    • 作用​:配置服务提供者暴露服务所使用的协议和端口。

    • 位置 ​:通常只在提供者端配置。

    • 示例​(使用默认的 dubbo 协议):

      复制代码
      <dubbo:protocol name="dubbo" port="20880"/>
  4. ​**服务提供者标签 - <dubbo:service/>**​

    • 作用​:用于暴露一个服务,声明它是一个 Dubbo 服务。

    • 位置 ​:​提供者端。

    • 必加​:提供者端暴露服务时必须加。

    • 示例​:

      复制代码
      <!-- interface 是服务的全限定接口名 -->
      <dubbo:service interface="com.example.service.UserService" ref="userService"/>
      <bean id="userService" class="com.example.service.UserServiceImpl"/>
  5. ​**服务消费者标签 - <dubbo:reference/>**​

    • 作用​:用于引用一个远程的 Dubbo 服务,生成一个代理对象。

    • 位置 ​:​消费者端。

    • 必加​:消费者端调用远程服务时必须加。

    • 示例​:

      复制代码
      <!-- id 是生成的Bean的ID,用于注入 -->
      <dubbo:reference id="userService" interface="com.example.service.UserService"/>

      然后在代码中可以通过 @Autowired注入这个 userService

一个完整的 XML 配置示例

服务提供者配置文件 (provider.xml)​

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
    <!-- 应用名 -->
    <dubbo:application name="hello-world-app-provider"/>
    <!-- 注册中心 -->
    <dubbo:registry address="nacos://127.0.0.1:8848"/>
    <!-- 通信协议 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    
    <!-- 要暴露的服务接口实现 -->
    <bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
    <!-- 声明要暴露的服务 -->
    <dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>
</beans>

服务消费者配置文件 (consumer.xml)​

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
    <!-- 应用名 -->
    <dubbo:application name="hello-world-app-consumer"/>
    <!-- 注册中心 -->
    <dubbo:registry address="nacos://127.0.0.1:8848"/>
    
    <!-- 声明需要引用的远程服务 -->
    <dubbo:reference id="demoService" interface="org.apache.dubbo.samples.basic.api.DemoService"/>
</beans>

二、注解方式(现代推荐方式)

Dubbo 3.x 开始,官方强烈推荐使用基于注解的编程模型,更加简洁和现代。

核心注解:
  1. ​**@DubboService**​

    • 作用 ​:标记在服务实现类 上,替代 XML 中的 <dubbo:service/>,用于暴露服务。

    • 位置 ​:​提供者端的服务实现类上。

    • 示例​:

      复制代码
      // 提供者端
      @DubboService
      public class UserServiceImpl implements UserService {
          // ... 业务实现
      }
  2. ​**@DubboReference**​

    • 作用 ​:标记在消费者 端的字段或 Setter 方法上,替代 XML 中的 <dubbo:reference/>,用于注入远程服务代理。

    • 位置 ​:​消费者端的成员变量上。

    • 示例​:

      复制代码
      // 消费者端
      @RestController
      public class UserController {
      
          // 注入一个远程的UserService
          @DubboReference
          private UserService userService;
      
          @GetMapping("/user")
          public User getUser() {
              return userService.getUserById(1L);
          }
      }
  3. ​**@EnableDubbo**​

    • 作用 ​:需要加在 Spring Boot 应用的主启动类上,用于开启 Dubbo 的自动配置和注解扫描。

    • 位置​:主启动类。

    • 示例​:

      复制代码
      @SpringBootApplication
      @EnableDubbo // 开启Dubbo
      public class ProviderApplication {
          public static void main(String[] args) {
              SpringApplication.run(ProviderApplication.class, args);
          }
      }
配置(替代 XML 中的 <dubbo:application/>, <dubbo:registry/>

在注解模式下,这些全局配置不再使用标签,而是写在 application.ymlapplication.properties文件中。

application.yml 示例

复制代码
# Dubbo 配置
dubbo:
  application:
    name: your-app-name # 对应 <dubbo:application name="..."/>
  protocol:
    name: dubbo
    port: 20880        # 对应 <dubbo:protocol port="..."/>
  registry:
    address: nacos://127.0.0.1:8848 # 对应 <dubbo:registry address="..."/>
  # 其他配置...
  cloud:
    metadata-service-protocol: dubbo # 推荐用于Dubbo3服务发现

总结与选择

功能 XML 配置方式 注解方式(推荐)
应用配置 <dubbo:application/> dubbo.application.namein YAML
注册中心 <dubbo:registry/> dubbo.registry.addressin YAML
协议配置 <dubbo:protocol/> dubbo.protocolin YAML
暴露服务 <dubbo:service/> ​**@DubboService**​
引用服务 <dubbo:reference/> ​**@DubboReference**​
启动开关 自动加载XML ​**@EnableDubbo**​

给你的建议:​

  • 如果是新项目 ,强烈建议直接使用 ​注解方式 ​(@DubboService+ @DubboReference+ application.yml),这是目前最主流和简洁的方式。

  • 如果是维护老项目,可能会遇到 XML 配置方式,了解这些标签的含义至关重要。

希望这个详细的解释能帮助你!

相关推荐
回家路上绕了弯15 小时前
Dubbo 实战指南:从架构原理到高可用落地,解锁分布式服务治理新能力
后端·dubbo
zcz16071278215 天前
一文读懂 DNS:从域名解析到百度访问全流程
dubbo
一叶飘零_sweeeet5 天前
SPI 机制深度剖析:Java、Spring、Dubbo 的服务发现哲学与实战指南
java·spring·dubbo
杨DaB8 天前
【SpringBoot】Dubbo、Zookeeper
spring boot·后端·zookeeper·dubbo·java-zookeeper
Warren9814 天前
Java后端面试题(含Dubbo、MQ、分布式、并发、算法)
java·开发语言·分布式·学习·算法·mybatis·dubbo
不努力谁会可怜你?14 天前
Dubbo + zk 微服务
dubbo
Warren9814 天前
Java Record 类 — 简化不可变对象的写法
java·开发语言·jvm·分布式·算法·mybatis·dubbo
z***82916 天前
vivo Pulsar 万亿级消息处理实践(2)-从0到1建设 Pulsar 指标监控链路
人工智能·dubbo
helloworld_工程师16 天前
Dubbo应用开发之基于xml的第一个Dubbo程序
dubbo