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

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

相关推荐
王道长服务器 | 亚马逊云5 天前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws
妄小闲8 天前
百度竞价推广:搜索竞价信息流推广代运营
dubbo
Sam-August9 天前
【分布式架构实战】Spring Cloud 与 Dubbo 深度对比:从架构到实战,谁才是微服务的王者?
java·spring cloud·dubbo
syty20209 天前
K8s是什么
容器·kubernetes·dubbo
程序员小潘9 天前
Dubbo3序列化安全机制导致的一次生产故障
dubbo
LuiChun10 天前
docker desktop更新到【4.45.0 】后,旧容器镜像都丢失了
docker·容器·dubbo
程序员小潘13 天前
Dubbo3.3 Triple协议处理东西向流量
dubbo
敲上瘾13 天前
Docker 容器核心指令与数据库容器化实践
linux·运维·服务器·docker·容器·eureka·dubbo
YF云飞14 天前
Dubbo分布式服务框架全解析
java·dubbo
@才华有限公司15 天前
vscode翻译插件
ide·vscode·dubbo