dubbo+zookeeper的使用配置详解

dubbo+zookeeper的使用配置详解

在现在众多电商、app横行的时代,基本都用到了分布式。而在众多rpc框架中dubbo是最好的选择。dubbo推荐的注册中心是zookeeper,这两个东西一般配合使用。下面开始讲解他们的使用和配置。

一、ssm项目使用dubbo

大家都知道ssm项目使用的是xml文件进行配置。所以可以在resources下新建provider.xml,我在提供者项目下新建了这个文件,如下图所示:

这是一个比较完整的提供者文件,在每个标签上我都写了注释,下面将代码贴出:







    
    

    
    

    
    
    
    

    
    
    
    

    
    

下面贴出相应的消费者配置文件代码:




    
    

    
    

    
    

    
    
    
    
    
        
    

    
    

    
    

二、springboot使用dubbo

springboot使用dubbo有三种方式,下面一一给大家解释。

1.使用xml文件配置
这种方式跟ssm整合dubbo一样,配置文件内容不变,将文件放到resources下。

但是要注意在启动类上使用@ImportResourcr注解加载该配置文件,如下图所示:
dubbo+zookeeper的使用配置详解_第1张图片

2.在application.properties配置dubbo信息
dubbo+zookeeper的使用配置详解_第2张图片
然后在提供者用dubbo的@Service注解暴露服务,在消费者用dubbo的@Reference从注册中心获取对象。具体如下图所示:

提供者

消费者

3.使用配置类方式
大家知道springboot的配置一般有两种方式,一种是在application.properties配置文件里配置,还有就是使用配置类的方式,其实两种方式是一样的,只不过写的地方不同,原理都是在容器中注入bean。你可以在你项目中合适的位置新建一个类名,下面贴出代码:

提供者

package com.atguigu.gmall.config;

import com.alibaba.dubbo.config.*;
import com.atguigu.gmall.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;

@Configuration
public class MyDubboConfig {

    @Bean
    public ApplicationConfig applicationConfig(){
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("user-service-provider");
        return applicationConfig;
    }

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

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

//    
//        
//    
    @Bean
    public ServiceConfig serviceConfig(UserService userService){
        ServiceConfig serviceConfig = new ServiceConfig<>();
        serviceConfig.setInterface(UserService.class);
        serviceConfig.setRef(userService);
//        serviceConfig.setVersion("1.0.0");

        MethodConfig methodConfig = new MethodConfig();
        methodConfig.setName("getUserAddressList");
        methodConfig.setTimeout(2000);

        List methodList = new ArrayList();
        methodList.add(methodConfig);
        serviceConfig.setMethods(methodList);
        return serviceConfig;
    }

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

消费者

package com.atguigu.gmall.config;

import com.alibaba.dubbo.config.*;
import com.atguigu.gmall.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;

@Configuration
public class MyDubboConfig {

    @Bean
    public ApplicationConfig applicationConfig(){
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("order-service-consumer");
        return applicationConfig;
    }

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

//    
//        
//    
    @Bean
    public ReferenceConfig referenceConfig(UserService userService){
        ReferenceConfig referenceConfig = new ReferenceConfig();
        referenceConfig.setInterface(UserService.class);
        referenceConfig.setId("userService");
        referenceConfig.setVersion("1.0.0");

        MethodConfig methodConfig = new MethodConfig();
        methodConfig.setName("getUserAddressList");
        methodConfig.setTimeout(1000);

        List methodList = new ArrayList();
        methodList.add(methodConfig);
        referenceConfig.setMethods(methodList);
        return referenceConfig;
    }

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

总结:大家可以看到springboot的三种方式中在application.properties配置是无法进行方法级别的配置。另外两种是一样的,除了写法没啥区别。个人比较推荐使用xml进行配置。至于原因嘛。我好像发现配置类的方式使用版本号配置并不生效,也有可能是我配置错误,当然使用哪种方式因人而异。在博文中如果有什么错误欢迎大家指正,评论。也欢迎大家评论交流。谢谢大家!!

另外在附上我在本文提到的四个项目的百度云地址。
链接:https://pan.baidu.com/s/1BsCEjtJIzoXxmwPH2y30Gg
提取码:u549

以及dubbo+zookeeper项目学习视频地址:https://www.bilibili.com/video/av30612478

你可能感兴趣的:(分布式,dubbo,springboot)