使用springboot构建dubbo

本文介绍了如何利用SpringBoot构建Dubbo项目,通过简洁的注解配置,快速搭建分布式服务。步骤包括安装Zookeeper、创建SpringBoot工程、配置依赖、设定服务提供者和消费者,以及接口与实现的声明。

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

springboot是基于注解配置,比起以往的springMVC臃肿的xml配置(虽然springMVC也可以使用注解进行配置),可以快速、简便地搭建起web服务。

dubbo是阿里的一个分布式开源框架。

搭建步骤:

一、本地安装zookeeper并启动服务

二、使用 idea新建一个springboot工程

三、在pom.xml中添加配置,使用dubbo和zkclient(zookeeper的客户端)的maven仓库。

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>fastjson</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

四、dubbo相关配置:

基础配置,注册服务和协议

/**
* DubboBaseConfig.java
*/
import com.alibaba.dubbo.config.*;
import org.springframework.context.annotation.Bean;

public class DubboBaseConfig {
    @Bean
    public RegistryConfig registry() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("127.0.0.1:2181");
        registryConfig.setProtocol("zookeeper");
        return registryConfig;
    }

    @Bean
    public ApplicationConfig application() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("testApp");
        return applicationConfig;
    }

    @Bean
    public MonitorConfig monitorConfig() {
        MonitorConfig mc = new MonitorConfig();
        mc.setProtocol("registry");
        return mc;
    }

    @Bean
    public ReferenceConfig referenceConfig() {
        ReferenceConfig rc = new ReferenceConfig();
        rc.setMonitor(monitorConfig());
        return rc;
    }

    @Bean
    public ProtocolConfig protocol() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setPort(20880);
        return protocolConfig;
    }

    @Bean
    public ProviderConfig provider() {
        ProviderConfig providerConfig = new ProviderConfig();
        providerConfig.setMonitor(monitorConfig());
        return providerConfig;
    }
}

服务方配置

/**
* Export.java
*/
import com.alibaba.dubbo.config.spring.ServiceBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Export extends DubboBaseConfig{
    @Bean
    public ServiceBean<Person> personProvider(Person person) {
        ServiceBean<Person> serviceBean = new ServiceBean<Person>();
        serviceBean.setProxy("javassist");
        serviceBean.setVersion("myversion");
        serviceBean.setInterface(Person.class.getName());
        serviceBean.setRef(person);
        serviceBean.setTimeout(5000);
        serviceBean.setRetries(3);
        return serviceBean;
    }

消费方配置

/**
* Consumer.java
*/
import com.alibaba.dubbo.config.spring.ReferenceBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Consumer extends DubboBaseConfig{
    @Bean
    public ReferenceBean<Person> personConsumer() {
        ReferenceBean<Person> ref = new ReferenceBean<>();
        ref.setVersion("myversion");
        ref.setInterface(Person.class);
        ref.setTimeout(5000);
        ref.setRetries(3);
        ref.setCheck(false);
        return ref;
    }

}

五、实例

声明接口 Person

public interface Person {
    String talk();
}

服务方编写实现逻辑

import org.springframework.stereotype.Service;

@Service("person")
public class PersonImpl implements Person {
    @Override
    public String talk() {
        return "Provider personImpl method";
    }
}

服务方启动服务后,消费方声明跟服务方一样的dubbo基础配置和接口。

消费方不知道具体的实现逻辑,直接启动服务,调用接口。

    @Autowired
    Consumer consumer;

    @RequestMapping("/consumer")
    @ResponseBody
    public String refer(){
        return consumer.personConsumer().get().talk();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值