zookeeper与dubbo简单介绍:
Dubbo是一个RPC框架, 可以和spring无缝整合, RPC, 全称Remote Procedure Call 远程过程调用,是分布式架构的核心, Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Zookeeper是一个分布式应用程序协调服务,是Dubbo官方推荐的的注册中心有 数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、Watcher(事件监听器)、事件监听、配置维护,名字服务、分布式同步、分布式锁和分布式队列 等功能,这里不做一一介绍
详细请戳连接,大佬很厉害
https://blog.csdn.net/qq754772661/article/details/116010060
https://blog.csdn.net/w8827130/article/details/81834905
下面我们亲自来整合dubbo和zookeeper
1.下载dubbo和zookeeper,进行安装
安装好的目录下:
然后,我们让它跑起来:
1). 在dubbo根目录下进入cmd命令行,执行 mvn clean package -Dmaven.test.skip=true 进行打包,打包完成后,如下图,可在该目录下看到生成的jar包,然后我们执行 java -jar + jar包名,运行该jar,命令窗口不要关
2). 接着我们进入zk的目录,将原来的 zoo_sample.cfg 配置文件复制一份备份, 另一份改名为 zoo.cfg,在配置文件中,你可以看到看到zk监听的端口的配置 clientPort 为 2181,后面在项目中要配置
然后运行zk服务,命令行窗口不要关
访问 http://localhost:7001/ ,账号密码均为 root ,就可以看到 zk 服务中心
接下来我们来看项目的整合,ssm的整合这里就不做介绍了,我们只看spring和dubbo的整合,目录结构如下, dubbo和web为web项目,打包成war包,其余的均为普通项目,打成jar包,其中依赖关系为:
pojo里面做类的编写
mapper为持久层连接数据库,依赖pojo
service为业务层接口,依赖mapper
dubbo为service接口实现,依赖service
web为控制层,依赖service
添加依赖 :
<zookeeper.version>3.3.3</zookeeper.version>
<zkclient.version>0.10</zkclient.version>
<dubbo.version>2.6.4</dubbo.version>
<curator.version>2.8.0</curator.version>
<netty.version>4.0.35.Final</netty.version>
<!-- zookeeper的依赖包 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
</dependency>
<!-- dubbo的核心包,去除掉springframework包之间的冲突 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
<!--netty-->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty.version}</version>
</dependency>
在服务提供项目dubbo中添加xml配置,这里zk的端口就为上面在zk配置文件看到的
<!-- 定义服务提供者在dubbo中的名称 -->
<dubbo:application name="DubboServiceContentProvider"/>
<!-- 使用zookeeper注册中心暴露服务地址,完成dubbo的注册-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="3000" check = "false"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明需要暴露的接口
<dubbo:service interface="com.cl.service.UserService" ref="userService"></dubbo:service>
<bean id="userService" class="com.cl.service.impl.UserServiceImpl"/>-->
<dubbo:annotation package="com.cl.service.impl"/>
在spring配置文件引入dubbo 的 xml 配置文件
你可以通过在main方法中通过 ClassPathXmlApplicationContext 加载 dubbo 的 xml文件启动服务,不过我这里直接打成war包, 用tomact启动,启动成功后,刷新zk的服务中心,可以看到服务成功注册进zk中心
接下来我们来看消费者,同理,添加dubbo的xml文件
这里注意,端口不能和提供者一致,另外,超时最好设置长一点
<!--注解扫描 -->
<dubbo:annotation package="com.cl" />
<!-- 定义服务提供者在dubbo中的名称 -->
<dubbo:application name="DubboServiceContentConsumer">
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
<!-- 使用zookeeper注册中心暴露服务地址,完成dubbo的注册-->
<dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="3000" protocol="zookeeper"/>
<dubbo:consumer check="false"/>
<!-- 使用dubbo协议调用定义好的api接口 -->
<dubbo:reference id="userService" interface="com.cl.service.UserService"
check="false"/>
按照以往的操作,是在spring配置文件中通过 import 标签引入 dubbo 的配置文件,在引入之后,在
controller中,依赖注入用 Reference 注解,但是在调试过程,发现 Reference 注入为空,详情见
https://blog.csdn.net/qq_39575279/article/details/83546401
这里将在spring-mvc配置文件中引入dubbo配置文件,注解依然用 Autowired 注解注入,同时,业务层和持久层分离出了项目,spring的主配置文件可以删除
这里依然可以用上面提到的方法在main中进行测试,但是我这里还是在tomact中启动
编写测试,访问成功
在zk服务中心也可以看到消费者的记录
至此,ssm整合dubbo+zk 就完成了