linux 安装 zookeeper

在linux上安装ZooKeeper

第一步
安装jdk

第二步:
将Zookeeper 压缩包上传到linux 系统

第三步:
新建zookeeper目录

mkdir /usr/local/zookeeper

回到zookeeper 压缩包所在路径,解压文件到指定目录

tar -zxvf zookeeper-3.4.5.tar.gz  -C /usr/local/zookeeper/

第四步:
进入到zookeeper-3.4.5目录,创建data文件夹

cd  /usr/local/zookeeper/zookeeper-3.4.5mkdir data

第五步:
进入到conf目录,把zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper在启动时会找这个文件作为默认配置文件

cd /usr/local/zookeeper/zookeeper-3.4.5/confmv zoo_sample.cfg zoo.cfg

第六步:
配置zookeeper

vim zoo.cfg

配置文件中的dataDir对应的路径为上面创建data文件夹 的路径

•tickTime:这个时间是作为Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

•dataDir:顾名思义就是 Zookeeper保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

•dataLogDir:顾名思义就是Zookeeper 保存日志文件的目录

•clientPort:这个端口就是客户端连接Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求

第七部:
启动ZooKeeper

cd /usr/local/zookeeper/zookeeper-3.4.5/bin./zkServer.sh start

查看ZooKeeper 状态

./zkServer.sh status


关闭 Zookeeper

./zkServer.sh stop

项目目录结构如下图:maven 聚合工程

搭建工程

创建父工程

选择 Maven Project ---------> Next

Next

填写相应信息,打包方式选择pom。点击Finsh 。完成工程创建

打开父工程的POM。添加以下依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.kavin</groupId><artifactId>dubbo-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging<!-- jar 包版本管理 --><properties><dubbo.version>2.6.2</dubbo.version>        <spring.version>4.3.16.RELEASE</spring.version><jstl.version>1.2</jstl.version><junit.version>4.11</junit.version><logback.version>1.0.13</logback.version><jcl-over-slf4j.version>1.7.5</jcl-over-slf4j.version><jdk.version>1.8</jdk.version><encoding>UTF-8</encoding></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-config-spring</artifactId><version>${dubbo.version}</version></dependency><!-- zookeeper注册中心 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-registry-zookeeper</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-rpc-dubbo</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-remoting-netty</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo-serialization-hessian2</artifactId><version>${dubbo.version}</version></dependency> <!--spring core--><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${jcl-over-slf4j.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency></dependencies><build><finalName>dubbo-parent</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>${jdk.version}</source><target>${jdk.version}</target><encoding>${encoding}</encoding></configuration></plugin></plugins></build>
</project>

创建 dubbo-api 子模块

勾选 Create a simple project。填写Moudle Name ,然后点击 Next


选择打包方式为 jar 。点击finsh 完成

创建 dubbo-provider 和 dubbo-consumer WEB工程

选择Maven Moudle ,点击Next

不勾选Create a Simple project, 点击Next

选择最后一版本,然后点击 Next

点击Next

dubbo-provider 同 dubbo-consumer 一样创建工程。

至此 整个聚合工程搭建完成

创建需要的JAVA 类

在 dubbo-api 中创建提供的服务接口

package com.kavin.api;import java.util.List;/*** dubbo 对外提供的服务接口 * @author Kavin**/
public interface UserService {public String sayHello(String name);}

在dubbo-provider 创建 接口的实现类。在该实现类上加上dubbo提供的@Service注解,注册暴露服务,在dubbo的配置文件中扫描带有此注解的服务,注册到zookeeper

package com.kavin.provider.service;import com.alibaba.dubbo.config.annotation.Service;
import com.kavin.api.UserService;
import com.kavin.pojo.User;import java.util.ArrayList;
import java.util.List;@Service //使用dubbo提供的service注解,注册暴露服务
public class UserServiceImpl implements UserService{public String sayHello(String name) {return "Hello " + name;}
}

在dubbo-consumer 项目中编写 LoginService 调用dubbo暴露的接口

package com.kavin.consumer.service;import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.kavin.api.UserService;@Service
public class LoginService {@Reference    //使用dubbo提供的reference注解引用远程服务private UserService userService;public String getMsg() {return userService.sayHello("张三");}
}

controller调用LoginService

 package com.kavin.consumer.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.kavin.consumer.service.LoginService;
@Controller
public class commonController {@Autowiredprivate LoginService loginService;@RequestMapping("/")public String getUser() {System.out.println(loginService.getMsg());return "index";}
}

编写配置文件

配置服务提供者端(dubbo-provider项目)的dubbo配置文件 spring-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:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">     <!--  <dubbo:application name="hello-world-app1"/><dubbo:registry  protocol="zookeeper"  address="127.0.0.1:2181"  /><dubbo:protocol name="dubbo" port="20881" />     <dubbo:service interface="com.yangs.test.service.DemoServer" ref="demoService" /><bean id="demoService" class="com.yangs.test.service.impl.DemoServerImpl" />  --><!-- 以上是配置实现,下面使用注解实现 --><dubbo:application name="dubbo-provider"/><dubbo:registry  protocol="zookeeper"  address="192.168.140.132:2181"  /><dubbo:protocol name="dubbo" port="20881" />     <!--    在配置文件中加上<dubbo:annotation>,是dubbo的扫描标签,它除了会扫描带有'@Component'、'@Service'、'@Controller'注解的类,把它们注册成SpringBean之外,它还会扫描带有”@Service” (dubbo的service标签)的接口实现类发布服务(必须有实现接口,不然或抛出BeanCreationException异常)。同时在要发布服务的接口实现类上加上”@Service” (dubbo的service标签)。启动服务器,服务就发布成功了。 --><dubbo:annotation package="com.kavin.provider"/> </beans>

配置服务提供者端(dubbo-consumer项目)的dubbo配置文件 root-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:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd">     <!-- <dubbo:application name="hello-world-app"/><<dubbo:registry  protocol="zookeeper"  address="127.0.0.1:2181"  /><dubbo:protocol name="dubbo" port="20880" />     <dubbo:service interface="com.yangs.test.service.DemoServer" ref="demoService" /><bean id="demoService" class="com.yangs.test.service.impl.DemoServerImpl" /> --><!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样  192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183--><dubbo:application name="dubbo-consumer" />      <!-- 使用multicast广播注册中心暴露发现服务地址 --><dubbo:registry  protocol="zookeeper"  address="192.168.140.132:2181" />   <!-- 生成远程服务代理,可以和本地bean一样使用demoService   通过配置实现 <dubbo:reference id="demoService" interface="com.yangs.test.service.DemoServer" /> --><!-- 再配置文件中加上<dubbo:annotation>,它会扫描所有注册bean的java类,发现带”@Reference”标签的属性,它会去寻找发布的provider是否有匹配的接口,有就自动注入。 --><dubbo:annotation package="com.kavin.consumer"/></beans>

配置dubbo-consumer 的spring 包扫描配置文件,把扫描路径下的包的javaBean加载到spring容器中

<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 开启注解扫描  扫描spring注解注册到spring容器中 --><context:component-scan base-package="com.kavin.consumer.service" /></beans>

配置dubbo-consumer 和 dubbo-provider 配成SpringMVC 架构

编写spring-mvc 配置文件

<?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:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 开启注解扫描  扫描spring注解注册到spring容器中 --><context:component-scan base-package="com.kavin.consumer" /><!-- 配置视图解析器,并指定视图所在的文件夹 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/html/" /><property name="suffix" value=".html" /></bean><!-- 添加注解驱动 --><!-- 注册 HandlerMapping(实现为 DefaultAnnotationHandlerMapping) 和 HandlerAdapter(实现为 AnnotationMethodHandlerAdapter) 两个类型的 Bean,这两个 Bean 为 @Controllers(所有控制器) 提供转发请求的功能。还有一些其他的为 MVC 提供的功能: --><mvc:annotation-driven/><!--通过mvc:resources设置静态资源,这样servlet就会处理这些静态资源,而不通过控制器设置不过滤内容,比如:css,js,img 等资源文件location指的是本地的真实路径,mapping指的是映射到的虚拟路径。不设置此处否则请求静态资源的请求 会被DispatcherServlet处理 ,从而找不到对应的mapping--><mvc:resources mapping="/html/**" location="/html/"/>
</beans>

配置web.xml 文件
注意:在此处遇到一个坑,就是使用@注解方式调用服务出现空指针异常。
解决方法参考我的另一篇博文https://blog.csdn.net/liuhaiquan123521/article/details/94062904

dubbo-provider 的web.xml 文件

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app><display-name>dubbo-consumer</display-name><!-- 配置springMVC中央处理器  --> <servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>  <!-- 加载配置文件  --><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- 指定需要过滤的请求 Mapping   【/】 表示所有请求  --><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

dubbo-consumer 的web.xml配置文件

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"context"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app><display-name>dubbo-consumer</display-name><!-- 根上下文加载配置文件【root-dubbo.xml  和 root- context.xml】   dubbo的文件加载到spring容器中, spring容器才能解析dubbo的注解。而下面的springMVC则无法识别dubbo注解 --><context-param>  <param-name>contextConfigLocation</param-name><param-value>classpath:spring/root-*.xml</param-value></context-param><listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener> <!-- 配置springMVC中央处理器  --> <servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param>  <!-- 加载配置文件  --><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- 指定需要过滤的请求 Mapping   【/】 表示所有请求  --><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

至此.整个工程已经构建完毕了。

mvn 打包测试

右键 dubbo-parent -----> run as -----maven build

在弹出框中找到Goals 输入 命令 clean package ,点击 run 进行打包

控制台出现 xxxxxx …success 说明打包成功

打包之后如果项目出现红叉。可以 dubbo-parent 右键 maven ----update project

运行

添加Tomcat 。运行打包好的war 包

点击要运行的项目 右键 properties

选择要添加的tomcat 版本,点击Next


配置Tomcat

选择配置好的tomcat

在server 视图下添加 server

选择刚才添加好的tomcat 添加到server,点击finish 完成

右键tomcat ----->Add and Remove

点击Add All,点击Finish完成部署

右键tomcat ------open 修改 tomcat 的部署地址为 当前tomcat的webapps路径


运行

测试

在浏览器输入localhost:${端口号}/dubbo-consumer
访问的controller 返回index页面,然后看控制台发现接口已经成功调用了

总结:在搭建过程中遇到两个头疼的问题
1:jar包冲突问题:详情参考我的博客https://blog.csdn.net/liuhaiquan123521/article/details/93895944
2.使用注dubbo解方式调用服务出现空指针异常。参考我的博文https://blog.csdn.net/liuhaiquan123521/article/details/94062904

项目下载地址:https://github.com/liuhaiquan/dubbo

springMVC + Dubbo + zooKeeper超详细 步骤相关推荐

  1. Zookeeper超详细的面试题

    转载自  Zookeeper超详细的面试题 1.ZooKeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管 ...

  2. 四、Hive数据仓库应用之Hive数据查询语言(一)(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

  3. 大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题(以ubuntu-18.04.3、Mware Workstation 15.1.0 Pro为例)

    大数据基础学习三:Ubuntu下安装VMware Tools超详细步骤及需要注意的问题 (以ubuntu-18.04.3.Mware Workstation 15.1.0 Pro for Window ...

  4. mysql连接idea详细教程_idea配置连接数据库的超详细步骤

    学习时,使用IDEA的时候,需要连接Database,连接时遇到了一些小问题,下面记录一下操作流程以及遇到的问题的解决方法. 一. 连接操作 简介:介绍如何创建连接,具体连接某个数据库的操作流程. 1 ...

  5. 苹果手机mov文件如何复制到电脑_如何在手机上访问电脑上的文件(超详细步骤) iPhone版...

    之前分享了如何在两台电脑上共享文件,如需访问可点击如下链接: Town-Tree:如何在两台电脑之间共享文件(超详细步骤)​zhuanlan.zhihu.com 如何在安卓手机上访问电脑上的文件,可点 ...

  6. 三、Hive数据仓库应用之Hive数据操作语言(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7)

    Hive远程模式部署参考: 一.Hive数据仓库应用之Hive部署(超详细步骤指导操作,WIN10,VMware Workstation 15.5 PRO,CentOS-6.7) Hive数据定义语言 ...

  7. 如何发布自己的npm包(超详细步骤,博主都在用)

    发布自己的npm超详细步骤 前沿: 从去年毕业,vue掌握的还算熟练应用了,做过的vue项目也有十几个了吧,每次做项目的时候,有些组件老是使用,拷贝来拷贝去的使用.我就想把这些组件封装到一起,以后做项 ...

  8. python操作手机app超详细步骤

    〝 古人学问遗无力,少壮功夫老始成 〞 python操作手机app超详细步骤,现在很多app的都要刷经验打怪升级啥的,这些枯燥千篇一律但是很耗费时间的玩法,可以使用app自动去操作,解放双手,释放时间 ...

  9. 最全自建蚂蚁(leanote)笔记超详细步骤

    服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原) 需要依赖(工具) 轻量服务器(云服务器)一台 -- 环境Windows Server 2019 Mong ...

最新文章

  1. SGS 客户端协议解析
  2. rfid2-micro2440,keil4裸机
  3. linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战
  4. github服务器停止响应,如何解决“git pull,致命:无法访问'https://github.com ... \':服务器空回复”...
  5. idea tomcat部署web项目_项目开发之部署帆软到Tomcat服务一
  6. c语言循环字符,字符串 非暴力for循环法(内附C语言代码)
  7. 论文浅尝 | 可建模语义分层的知识图谱补全方法
  8. Activiti 基础概念
  9. request.getParameter() 和request.getAttribute() 区别
  10. leetcode @python 130. Surrounded Regions
  11. 如何从JQuery中的each()函数中断/退出? [重复]
  12. Helm 3 完整教程(十二):Helm 函数讲解(6)字典函数
  13. TV直播app TV版 超级直播 空壳 可玩性强 带EPG 带回看 带自定义 定制可带自定义协议等
  14. 用python实现文件加密功能
  15. linux 域名劫持,域名被劫持处理方案
  16. 计算机应用基础在线3,《计算机应用基础》第3阶段在线作业3.docx
  17. 新刷的小米手机系统没有便签,刷系统清除数据怎么恢复
  18. 如何阅读《深入理解计算机系统》
  19. android 设备最大像素,最高2100万像素镜头 拍照强悍手机盘点
  20. [数据结构] UVa1471 Defense Lines 防线

热门文章

  1. 清除composite里的子控件
  2. Qt:QTableView(01) 的用法
  3. QT之Tableview
  4. Codeforces Round #644(Div. 3) A-H
  5. Linux-Centos7防火墙配置
  6. 尚好房 07_前端房源展示
  7. 【ClearCase 学习笔记 】之(4/4)CC基本操作介绍
  8. VPN 原理以及实现
  9. 计算机存储器的有关术语,关于计算机存储器,不正确的描述是()。
  10. 图片的体积怎么压缩?这三种方法你会吗?