dubbo服务治理框架

官方文档学习:http://dubbo.apache.org/en-us/docs/user/quick-start.html

1、spring+dubbo+zookeeper集群环境搭建(示例学习)

1.1、zookeeper集群搭建

zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/

(1)将zookeeper解压成三份,分别修改conf/zoo.cfg配置文件。

dubbo服务治理框架_第1张图片

(2)zookeeper-1配置:

syncLimit=5
initLimit=10
tickTime=2000

#client连接的端口
clientPort=2181

#存放内存数据库快照的位置,该目录需要提前创建好
dataDir=e:/dubbo-test/zookeeper/zookeeper-1/data

#事务日志目录,目录需要提前创建好
dataLogDir=e:/dubbo-test/zookeeper/zookeeper-1/log

#zookeeper服务配置列表(方法1 任选一种即可)
dynamicConfigFile=E:/dubbo-test/zookeeper/zoo.cfg.dynamic

#直接在这里配置,zookeeper服务配置列表(方法2 任选一种即可)
##server.1=127.0.0.1:2281:3381
##server.2=127.0.0.1:2282:3382
##server.3=127.0.0.1:2283:3383

zookeeper-2、zookeeer-3的zoo.cfg配置和上面类似,只有clientPort、dataDir、dataLogDir不同。

(3)zoo.cfg.dynamic 配置注册中心集群列表:

server.1=127.0.0.1:2281:3381
server.2=127.0.0.1:2282:3382
server.3=127.0.0.1:2283:3383

server.A=B:C:D。其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

(4)在zookeeper配置文件中配置的dataDir目录下创建myid文件,内容和server.A中的A一样。

三个都配好之后,分别启动即可。(注:当启动第一个zookeeper时可能会报错,暂时不用担心,因为目前是集群,另外两个还没启动)

dubbo服务治理框架_第2张图片

1.2、dubbo+spring实现服务注册与发现

主要是将dubbo相关配置好就好了。

maven 依赖配置:


        
            com.alibaba
            dubbo
            2.6.2
        

        
            org.apache.zookeeper
            zookeeper
            3.5.1-alpha
        
        
        
            com.101tec
            zkclient
            0.9
        
        
        
            org.apache.curator
            curator-framework
            2.12.0
        
        
        
            com.esotericsoftware
            kryo
            4.0.0
        
        
        
            de.javakaffee
            kryo-serializers
            0.42
        

(1)服务提供方dubbo配置:



    
    
    
    
    
    
    
    
    
    
    

(2)消费方配置:



    
    
    
    
    
    

(3)提供方代码:

/**
 * @author chen jia hao
 */
public class Test {

    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"config/dubbo-provider.xml"});
        context.start();
        System.out.println("Provider started.");
        System.in.read();
    }
}

(4)消费方代码:

/**
 * @author chen jia hao
 */
public class Test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"config/dubbo-consumer.xml"});
        context.start();

        UserService userService = (UserService)context.getBean("userService");

        User user = new User();
        user.setUid(1);
        user.setBirthDate(new Date());
        user.setUserName("陈嘉豪");

        User result = userService.getUser(user);

        System.out.println(result.getUid()+"--"+result.getUserName()+"--"+result.getBirthDate());

    }
}

(4)启动提供方、消费方测试即可。

注:dubbo远程调用序列化方式默认是hessian2,这里我使用kryo序列化(需引入其依赖),kryo序列化效率更高。

1.3、dubbo中过滤器

上面的注册与发现,没有做任何安全性考虑,为了统一管理,我们可以通过dubbo提供的过滤器来为我们的提供方做完成一些校验。

(1)实现接口com.alibaba.dubbo.rpc.Filter。

import com.alibaba.dubbo.rpc.*;
import java.util.Arrays;

/**
 * @author chen jia hao
 */
public class AuthFillter implements Filter {
    @Override
    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {
        
        ///在这里先写具体的拦截逻辑,如果不让通过,可返回异常信息
        Object[] arguments = RpcContext.getContext().getArguments();
        if(arguments!=null){
            Arrays.stream(arguments).forEach(item->{
                System.out.println(item);
            });
        }
        RpcResult rpcResult = new RpcResult();
        rpcResult.setException(new RuntimeException("您没有这个权限!"));
        return rpcResult;
        //return invoker.invoke(invocation);//调用invoker.invoke(invocation)方可执行后面的操作
    }
}

(2)在resources目录下创建META-INF/dubbo/com.alibaba.dubbo.rpc.Filter ,添加如下信息:

com.alibaba.dubbo.rpc.Filter内容格式如下:
authFilter=com.cjh.AuthFilter

(3)修改dubbo的provider配置文件,在dubbo提供方中添加配置filter。里面的filter值对应于(2)中内容。

(4)启动提供方和消费方,消费方运行结果应如下:

 

1.4、dubbo-admin管理中心(可选)

dubbo-admin.war包下载地址:https://download.csdn.net/download/chen_jia_hao/10791836

上面地址,是笔者已经重新package的。可部署到tomcat8。

下载之后,将war包部署到tomcat,然后访问。

输入管理员密码即可。

dubbo服务治理框架_第3张图片

这里的密码可在项目的dubbo.proerties配置:

#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
#root密码配置
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

登录后如下:

dubbo服务治理框架_第4张图片

更多参考:

1、dubbo kryo 高效序列化:

https://www.codercto.com/a/29184.html

https://www.cnblogs.com/Eilen/p/6559040.html

2、dubbo-admin管理中心项目下载:

https://github.com/apache/incubator-dubbo

 

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