zookeeper的安装及配置
(1)下载地址
(2)windows系统和Linux系统下zookeeper的安装及配置
1、下载好后解压文件,进入目录:apache-zookeeper-3.5.9-bin/conf
2、配置zookeeper配置文件,先把zoo_sample.cfg配置样本复制一份重命名为zoo.cfg
3、zookeeper使用的jetty占用到了8080端口,如需要修改可进入conf/zoo.cfg配置文件里面添加:admin.serverPort=指定端口
4、启动方式:
windows系统:apache-zookeeper-3.5.9-bin/bin/zkServer.cmd,双击运行
linux系统:进入到bin目录下,运行命令:
启动:zkServer.sh start
关闭:zkServer.sh stop
创建Dubbo项目
(1)新建一个空项目,命名为:dubbo-project
(2) 创建"接口"模块,选择maven类型,命名为:dubbo-interface
(3) 参考步骤1,创建"服务提供者"模块,选择maven类型,命名为:dubbo-provider
(4) 参考步骤1,创建"消费者"模块,选择maven类型,命名为:dubbo-consumer
编写测试代码
(1)dubbo-interface
a. 目录结构
![]()
b. User.java
package com.heheda.www.model; import java.io.Serializable; /** * Description: * * @date:2021/10/10 18:45 * @author:呵呵哒 */ public class User implements Serializable { private Integer id; private String username; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
c. UserService.java
package com.heheda.www.service; import com.heheda.www.model.User; /** * Description: * * @date:2021/10/19 12:35 * @author:呵呵哒 */ public interface UserService { /** * 根据id查询用户信息 * @param id * @return */ User queryUserById(Integer id); }
d. pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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.heheda.www</groupId> <artifactId>dubbo-interface</artifactId> <version>1.0.0</version> <packaging>war</packaging> <build> <plugins> <!--JDK1.8编译插件--> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
(2)dubbo-provider
a. 目录结构
![]()
b. UserServiceImpl.java
package com.heheda.www.service.impl; import com.heheda.www.model.User; import com.heheda.www.service.UserService; /** * Description: * * @date:2021/10/26 18:01 * @author:呵呵哒 */ public class UserServiceImpl implements UserService { @Override public User queryUserById(Integer id) { User user = new User(); user.setId(id); user.setAge(11); user.setUsername("version-1"); return user; } }
c. UserServiceImpl2.java
package com.heheda.www.service.impl; import com.heheda.www.model.User; import com.heheda.www.service.UserService; /** * Description: * * @date:2021/10/26 18:01 * @author:呵呵哒 */ public class UserServiceImpl2 implements UserService { @Override public User queryUserById(Integer id) { User user = new User(); user.setId(id); user.setAge(22); user.setUsername("version-2"); return user; } }
d. dubbo-provider.xml
<?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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!--声明dubbo服务提供者的名称:必须唯一--> <dubbo:application name="dubbo-provider"/> <!--声明dubbo的协议和端口号--> <dubbo:protocol name="dubbo" port="20880"/> <!--使用注册中心--> <dubbo:registry address="zookeeper://localhost:2181"/> <!--暴露接口服务--> <dubbo:service interface="com.heheda.www.service.UserService" ref="userServiceImpl" version="1.0.0"/> <dubbo:service interface="com.heheda.www.service.UserService" ref="userServiceImpl2" version="2.0.0"/> <!--加载接口实现类--> <bean id="userServiceImpl" class="com.heheda.www.service.impl.UserServiceImpl"/> <bean id="userServiceImpl2" class="com.heheda.www.service.impl.UserServiceImpl2"/> </beans>
e. web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!--加载配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dubbo-provider.xml</param-value> </context-param> <!--添加监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
f. pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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.heheda.www</groupId> <artifactId>dubbo-provider</artifactId> <version>1.0.0</version> <packaging>war</packaging> <dependencies> <!--Spring依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--Dubbo依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!--zookeeper依赖--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.1.0</version> </dependency> <!--引入接口工程--> <dependency> <groupId>com.heheda.www</groupId> <artifactId>dubbo-interface</artifactId> <version>1.0.0</version> </dependency> </dependencies> <build> <plugins> <!--JDK1.8编译插件--> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
(3)dubbo-consumer
a. 目录结构
b. UserController.java
package com.heheda.www.web; import com.heheda.www.model.User; import com.heheda.www.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; /** * Description: * * @date:2021/10/28 16:05 * @author:呵呵哒 */ @Controller public class UserController { @Autowired private UserService userService; @Autowired private UserService userService2; @RequestMapping(value = "/userDetail") public String userDetail(Model model, Integer id){ User user = userService.queryUserById(id); model.addAttribute("user",user); User user2 = userService2.queryUserById(id); model.addAttribute("user2",user2); return "userDetail"; } }
c. applicationContext.xml
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--扫描组件--> <context:component-scan base-package="com.heheda.www.web"/> <!--配置注解驱动--> <mvc:annotation-driven/> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
d. dubbo-consumer.xml
<?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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!--声明dubbo服务提供者的名称:必须唯一--> <dubbo:application name="dubbo-consumer"/> <!--指定注册中心--> <dubbo:registry address="zookeeper://localhost:2181"/> <!--引用远程接口服务--> <dubbo:reference id="userService" interface="com.heheda.www.service.UserService" version="1.0.0"/> <dubbo:reference id="userService2" interface="com.heheda.www.service.UserService" version="2.0.0"/> </beans>
e. web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!--配置中央调度器--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--初始化参数--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml,classpath:dubbo-consumer.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
f. userDetail.jsp
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/10/28 Time: 16:08 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>用户信息</title> </head> <body> <h1>用户1</h1> <div>${user.id}</div> <div>${user.username}</div> <div>${user.age}</div> <h1>用户2</h1> <div>${user2.id}</div> <div>${user2.username}</div> <div>${user2.age}</div> </body> </html>
g. pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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.heheda.www</groupId> <artifactId>dubbo-consumer</artifactId> <version>1.0.0</version> <packaging>war</packaging> <dependencies> <!--Spring依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.16.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.16.RELEASE</version> </dependency> <!--Dubbo依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!--zookeeper依赖--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.1.0</version> </dependency> <!--引入接口工程--> <dependency> <groupId>com.heheda.www</groupId> <artifactId>dubbo-interface</artifactId> <version>1.0.0</version> </dependency> </dependencies> <build> <plugins> <!--JDK1.8编译插件--> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
运行项目
(1)部署项目"dubbo-provider"到tomcat
(2)部署项目"dubbo-consumer"到tomcat
参考【部署项目"dubbo-provider"到tomcat 】
修改:
HTTP port: 8081
JMX port: 1091
(3)先启动zookeeper,再启动"dubbo-provider"和"dubbo-consumer"
浏览器访问:http://localhost:8081/userDetail?id=10086
得到如下结果:
![]()
添加监控中心:dubbo-admin
(1)dubbo-admin下载地址
(2)导入项目
下载好dubbo-admin后解压得到"dubbo-admin-develop"目录,拷贝该目录到"dubbo-project"下
再回到开发工具idea中,把刚刚的目录"dubbo-admin-develop"导入到项目中
(2)启动dubbo-admin
a. 启动"dubbo-admin-server"
修改配置参数,端口改为:8888
修改完成后,直接运行"DubboAdminApplication.java"的main方式启动
b. 启动"dubbo-admin-ui"
修改配置参数,修改请求的端口为:8888
idea中打开终端,进入到"dubbo-admin-ui"目录中:
cd dubbo-admin-develop/dubbo-admin-ui
安装依赖包:npm install
如果下载依赖包太慢,可以改为淘宝镜像,输入命令即可:
npm config set registry https://registry.npm.taobao.org
依赖下载成功后,启动项目:npm run dev
启动成功后,点击控制台给的访问地址即可:
账号密码在"dubbo-admin-server"的配置文件中可以配置,默认为root