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 配置方式,了解这些标签的含义至关重要。

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

相关推荐
百度智能云技术站2 天前
百度 Agent 安全中心:构筑企业智能体的安全底座
人工智能·安全·dubbo
科技快报7 天前
百度智能云:加大三方面投入 解决具身智能产业硬问题
百度·dubbo
大力财经8 天前
智能体时代如何衡量“DAA“?百度新全栈AI云给出答案
人工智能·百度·dubbo
不开大的凯20779 天前
超级更新月的“硬菜“:模型、硬件与应用全面进入爆发期
人工智能·dubbo·文心一言
lwf00616411 天前
Dubbo vs Feign:微服务RPC框架深度对比
微服务·rpc·dubbo
诸葛务农11 天前
豆包收费与DeepSeek分级(收费准备?)场景下百度会满血复活吗?
百度·dubbo
Ew95a55o312 天前
springMVC-RequestMapping注解
dubbo
吃不胖爹13 天前
主动提交给搜索引擎,例如百度搜索资源平台、Google Search Console:验证站点、提交 sitemap,便于发现和收录
搜索引擎·百度·dubbo
0和1的搬运工15 天前
基于Java+SpringBoot+Vue+HTML5高校教师电子名片系统(源码+LW+调试文档+讲解等)/高校教师/电子名片/系统/教育科技/教育信息化/名片管理/电子身份/教师信息管理/校园信息化
spring cloud·tomcat·log4j·maven·intellij-idea·dubbo·java-consul
咸鱼2.020 天前
【java入门到放弃】Dubbo
java·开发语言·dubbo