Spring零配置整合Dubbo

本文介绍如何在Spring环境中集成Dubbo框架进行服务提供与消费。首先展示了所需依赖及配置,随后通过示例说明了服务提供方和服务消费方的具体实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先引入Dubbo相关依赖:


        <cxf-core.version>3.0.4</cxf-core.version>
        <resteasy-client.version>3.5.1.Final</resteasy-client.version>
        <hessian.version>4.0.51</hessian.version>
        <xmemcached.version>2.4.3</xmemcached.version>
        <curator-framework.version>2.12.0</curator-framework.version>
        <zkclient.version>0.10</zkclient.version>

    <!-- https://mvnrepository.com/artifact/com.alibaba.dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>${cxf-core.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-client -->
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-client</artifactId>
            <version>${resteasy-client.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.caucho/hessian -->
        <dependency>
            <groupId>com.caucho</groupId>
            <artifactId>hessian</artifactId>
            <version>${hessian.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.googlecode.xmemcached/xmemcached -->
        <dependency>
            <groupId>com.googlecode.xmemcached</groupId>
            <artifactId>xmemcached</artifactId>
            <version>${xmemcached.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${curator-framework.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>${zkclient.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

假设消费方希望调用提供方的下列接口:

public interface CityDubboService {

    /**
     * 根据城市名称,查询城市信息
     *
     * @param cityName
     */
    City findCityByName(String cityName);
}

我们先看服务提供方这边的使用形式:

  1. 第一步需要有实现此接口,当消费方调用时能有对象来执行业务逻辑。
import com.alibaba.dubbo.config.annotation.Service;

import com.bob.integrate.dubbo.common.entity.City;
import com.bob.integrate.dubbo.common.service.CityDubboService;

/**
 * 城市业务 Dubbo 服务层实现层
 */
@Service(version = "1.0.0")
public class CityServiceProvider implements CityDubboService {

    @Override
    public City findCityByName(String cityName) {
        return new City(1L, 2L, "温岭", "是我的故乡");
    }
}

同时使用Dubbo的@Service注解,将其注册为Spring的Bean和Dubbo的开放组件。

当然@Service注解能其作用的前提是将Dubbo框架整合入Spring中:

/**
 * @author Administrator
 * @create 2018-05-06 19:24
 */
@EnableDubbo
@Configuration
@PropertySource("classpath:dubbo-provider.properties")
public class DubboProviderContextConfig {
}


dubbo-provider.properties:

dubbo.application.name=provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
#可以直接设置组件的Bean名称,这样就不使用默认的构造函数生成,因此以dubbo.protocol开头的其他配置就没用了,直接在Bean里设置
#dubbo.protocol.id=dubboProtocolBean
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

这样Spring容器在启动时就会通过@EnableDubbo引入Dubbo,解析相应的配置,注册相应的组件。 不过在启动Spring前,请先启动zookeeper,让其接受提供者和消费者的服务注册。

Zookeeper版本选择3.4.*,匹配zkclient的版本。

2 . 下面看Dubbo消费者的使用方式:

/**
 * @author Administrator
 * @create 2018-05-06 19:25
 */
@EnableDubbo
@ComponentScan
@PropertySource("classpath:dubbo-consumer.properties")
public class DubboConsumerContextConfig {
}


dubbo-consumer.properties: 

dubbo.application.name=consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181

向将Dubbo引入Spring,同时配置zookeeper注册地址以及应用方名称。

之后就可以在Spring Bean中使用RPC服务:

@Component
public class CityServiceConsumer {

    @Reference(version = "1.0.0")
    private CityDubboService cityDubboService;

    public void printCity() {
        String cityName = "杭州";
        City city = cityDubboService.findCityByName(cityName);
        System.out.println(new Gson().toJson(city));
    }
}

通过@Reference标识开放接口,在使用时就能调用提供方此接口的实现Bean,实现RPC调用。

以上就是最简化的Dubbo在Spring里的配置和使用形式。

### Spring Cloud Alibaba 整合 Dubbo 示例配置教程 #### 1. 环境准备 为了成功整合 Spring Cloud Alibaba 和 Dubbo,需确保环境满足以下条件: - Java/JDK 版本建议为 17 或更高版本[^2]。 - 使用的 Spring Boot 版本应与 Spring Cloud Alibaba 的兼容版本匹配。例如,在此案例中使用的 Spring Boot 版本为 `3.2.4`,而 Spring Cloud Alibaba 版本为 `2023.0.1.0`。 #### 2. 添加依赖项 在项目的 `pom.xml` 文件中引入必要的 Maven 依赖项: ```xml <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Spring Cloud Alibaba Nacos Discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2023.0.1.0</version> </dependency> <!-- Spring Cloud Alibaba Dubbo Integration --> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.3.1</version> </dependency> <!-- Other Dependencies as Needed --> </dependencies> ``` 上述代码片段展示了如何通过 Maven 引入所需的依赖项来支持 Spring Cloud Alibaba 和 Dubbo 的集成。 #### 3. 配置文件设置 编辑 `application.yml` 文件以完成基础配置: ```yaml server: port: 8080 spring: application: name: demo-service profiles: active: prod cloud: nacos: discovery: server-addr: localhost:8848 config: prefix: ${spring.application.name} file-extension: yaml dubbo: protocol: name: dubbo port: 20880 registry: address: nacos://localhost:8848 scan: base-packages: com.example.demo.service ``` 以上配置定义了服务端口、Nacos 注册中心地址以及 Dubbo 协议的相关参数[^3]。 #### 4. 创建接口和服务实现类 创建一个简单的 Dubbo 接口及其对应的服务实现类: ```java // 定义 Dubbo 接口 public interface DemoService { String sayHello(String name); } // 实现 Dubbo 接口 @Service(version = "1.0.0") public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 这段代码展示了一个基本的 Dubbo 接口及其实现逻辑。 #### 5. 启动类配置 最后,在启动类上添加必要注解以便启用 Dubbo 功能和支持 Spring Cloud Alibaba: ```java @SpringBootApplication @DubboComponentScan(basePackages = "com.example.demo.service") @EnableDiscoveryClient public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 该部分代码用于激活 Dubbo 组件扫描并注册到 Nacos 中作为微服务的一部分。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值