欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【分布式入门】Dubbo和Zookeeper的基本使用

程序员文章站 2022-06-21 17:43:55
...

Dubbo+Zookeeper+Spring+SpringMVC

一 相关概念

1.Dubbo框架图

【分布式入门】Dubbo和Zookeeper的基本使用

2.节点角色说明

Node Role Spec
Provider 提供程序所公开的远程服务
Consumer 使用者调用远程服务
Registry 注册中心负责服务发现和配置
Monitor 监视器计算服务调用的次数和时间
Container 容器管理服务的生存期

二 zookeeper安装和配置

1.zookeeper下载链接

https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

以最新的zookeeper-3.5.6为例,下载二进制源码包

【分布式入门】Dubbo和Zookeeper的基本使用

2.配置zookeeper

解压到/usr/local/zookeeper下新建data文件夹

【分布式入门】Dubbo和Zookeeper的基本使用

修改配置文件的dataDir路径

#进入conf文件夹
cd /usr/local/zookeeper/conf
#修改配置文件名为zoo.cfg
mv zoo_sample.cfg zoo.cfg
#编辑zoo.cfg中的dataDir路径为新建的data路径
vim zoo.cfg

【分布式入门】Dubbo和Zookeeper的基本使用

3.启动单机版zookeeper

【分布式入门】Dubbo和Zookeeper的基本使用

三 编写provider

1.pom依赖

<dependencies>
    <dependency>
        <groupId>cn.javak</groupId>
        <artifactId>dubbo-service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
        <exclusions>
            <!--干掉spring2-->
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.6.RELEASE</version>
    </dependency>
    <!--访问zookeeper的客户端jar包-->
    <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.10</version>
    </dependency>
</dependencies>

2.dubbo配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--给当前Provider自定义名字,再monitor或管理工具中区别是哪一个provider-->
    <dubbo:application name="dubbo-service"/>
    <!--配置注册中心 注册中心的ip和端口 以及 使用哪种注册中心-->
    <dubbo:registry address="x.x.x.x:2181" protocol="zookeeper"></dubbo:registry>
    <!--配置端口 使用什么协议 consumer invoke provider时的端口-->
    <dubbo:protocol name="dubbo" prompt="20880"></dubbo:protocol>
    <!--注册功能 注册接口 引用接口实现类bean-->
    <dubbo:service interface="cn.javak.service.HelloService" ref="helloServiceImpl"></dubbo:service>
    <bean id="helloServiceImpl" class="cn.javak.service.impl.HelloServiceImpl"></bean>
</beans>

3.业务接口和实现类

package cn.javak.service;

public interface HelloService {
    String hello(String hello);
}
package cn.javak.service.impl;

import cn.javak.service.HelloService;

public class HelloServiceImpl implements HelloService {
    @Override
    public String hello(String name) {
        return "Hello Dubbo-->传递的name为:"+name;
    }
}

测试类

public class Test01 {
    public static void main(String[] args) {
        //使用spring启动
        /*ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
        ac.start();*/

        //官方推荐,要求applicationContext-dubbo.xml放在/META-INF/spring中 *.xml
        Main.main(args);
    }
}

注意:配置文件要放在根目录下META-INF/spring中,spring才能够捕获

四 使用dubbo-admin

在tomcat中放入dubbo-admin的war包,启动tomcat,第一次启动会失败

关闭tomcat,修改dubbo.properties

vim WEB-INF/dubbo.properties

将地址改为zookeeper的真实地址加端口即可

【分布式入门】Dubbo和Zookeeper的基本使用

再次启动,并访问

【分布式入门】Dubbo和Zookeeper的基本使用

显示HelloService接口注册成功

Consumer调用

consumer的业务层

@Service
public class TestServiceImpl implements TestService {
    @Reference//获取该接口的代理对象
    private HelloService helloService;
    @Override
    public String test(String name) {
        //调用provider中提供的功能
        return helloService.hello(name);
    }
}

通过controller层访问

@Controller
public class HelloController {
    @Autowired
    private TestService testService;
    @ResponseBody
    @RequestMapping("hello")
    public String hello(String name){
        return testService.test(name);
    }
}

【分布式入门】Dubbo和Zookeeper的基本使用

相关标签: 分布式 java