使用springboot构建dubbo

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();
    }

猜你喜欢

转载自blog.csdn.net/onpwerb/article/details/69938524