# 8 快速入门 dubbo
8 快速入门 dubbo
注册中心 Zookeeper
- 官方推荐使用 zookeeper 注册中心;
- 注册中心负责服务地址的注册与查找,相当于目录服务;
- 服务提供者和消费者只在启动时与注册中心交互,注册中不转发请求,压力较小;
- Zookeeper 是 apache hadoop 的子项目,是一个树形的目录服务,支持变更推送,适合作为
dubbo 的服务注册中心,工业强度较高,可用于生产环境;
入门 demo 的架构
注意
如果在粘贴这些web.xml 或者pom.xml里面build里面的标签发送这样的报错提示,注意哦 这可能不是错误,不会影响到我们项目的运行。
服务提供者
1、一个空的maven项目
2、提供一个服务接口即可
项目目录结构
图中红框的需要我们创建
提供方的pom.xml
各种依赖请严格按照下面的版本
xml
1 <properties> 2 <maven.compiler.source>8</maven.compiler.source> 3 <maven.compiler.target>8</maven.compiler.target> 4 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 5 <spring.version>5.0.6.RELEASE</spring.version> 6 </properties> 7 8 <packaging>war</packaging> 9 10 <dependencies> 11 <dependency> 12 <groupId>org.springframework</groupId> 13 <artifactId>spring-webmvc</artifactId> 14 <version>${spring.version}</version> 15 </dependency> 16 <dependency> 17 <groupId>org.springframework</groupId> 18 <artifactId>spring-core</artifactId> 19 <version>${spring.version}</version> 20 </dependency> 21 <dependency> 22 <groupId>org.springframework</groupId> 23 <artifactId>spring-beans</artifactId> 24 <version>${spring.version}</version> 25 </dependency> 26 <dependency> 27 <groupId>org.springframework</groupId> 28 <artifactId>spring-context</artifactId> 29 <version>${spring.version}</version> 30 </dependency> 31 <dependency> 32 <groupId>org.springframework</groupId> 33 <artifactId>spring-context-support</artifactId> 34 <version>${spring.version}</version> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework</groupId> 38 <artifactId>spring-tx</artifactId> 39 <version>${spring.version}</version> 40 </dependency> 41 <!--dubbo --> 42 <dependency> 43 <groupId>com.alibaba</groupId> 44 <artifactId>dubbo</artifactId> 45 <version>2.5.7</version> 46 </dependency> 47 <dependency> 48 <groupId>org.apache.zookeeper</groupId> 49 <artifactId>zookeeper</artifactId> 50 <version>3.4.6</version> 51 </dependency> 52 <dependency> 53 <groupId>com.github.sgroschupf</groupId> 54 <artifactId>zkclient</artifactId> 55 <version>0.1</version> 56 </dependency> 57 <dependency> 58 <groupId>javassist</groupId> 59 <artifactId>javassist</artifactId> 60 <version>3.11.0.GA</version> 61 </dependency> 62 </dependencies> 63 64 <build> 65 <plugins> 66 <plugin> 67 <groupId>org.apache.tomcat.maven</groupId> 68 <artifactId>tomcat7-maven-plugin</artifactId> 69 <configuration> 70 <port>8001</port> 71 <path>/</path> 72 </configuration> 73 <executions> 74 <execution> 75 <!-- 打包完成后,运行服务 --> 76 <phase>package</phase> 77 <goals> 78 <goal>run</goal> 79 </goals> 80 </execution> 81 </executions> 82 </plugin> 83 </plugins> 84 </build>
折叠
提供方接口
1 public interface HelloService { 2 String sayHello(String name); 3 }
暴露的提供方实现
@Service 这个注解不是spring的哦
1 @com.alibaba.dubbo.config.annotation.Service 2 public class HelloServiceImpl implements HelloService { 3 @Override 4 public String sayHello(String name) { 5 return "Hello," + name + "!!!"; 6 } 7 }
服务提供方的配置文件spring.xml
xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 5 xsi:schemaLocation=" 6 http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://code.alibabatech.com/schema/dubbo 9 http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 10 <!--1.服务提供方在zookeeper中的“别名”--> 11 <dubbo:application name="dubbo-server"/> 12 <!--2.注册中心的地址--> 13 <dubbo:registry address="zookeeper://192.168.77.132:2181"/> 14 <!-- 让监控 去注册中心 自动找服务 --> 15 <dubbo:monitor protocol="registry"/> 16 <!--3.扫描类(将什么包下的类作为服务提供类)--> 17 <dubbo:annotation package="service.impl"/> 18 </beans>
提供方的web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 6 id="WebApp_ID" version="3.1"> 7 <!--使用上下文监听器-初始化项目环境--> 8 <listener> 9 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 10 </listener> 11 <context-param> 12 <param-name>contextConfigLocation</param-name> 13 <param-value>classpath:spring/spring.xml</param-value> 14 </context-param> 15 </web-app>
服务消费方
项目目录结构
消费方的pom.xml
与服务方一致,只需要修改tomcat的端口为8002
消费方的Controller
因为我们是通过浏览器去访问的,所以要创建controller层,提供对外访问的接口
1 @RestController 2 public class HelloAction { 3 @com.alibaba.dubbo.config.annotation.Reference 4 private HelloService hs; 5 6 @RequestMapping("hello/{name}") 7 @ResponseBody 8 public String hello(@PathVariable String name) { 9 return hs.sayHello(name); 10 } 11 }
消费方的接口
注意:
- controller中要依赖HelloService,所以我们创建一个接口;
- 这里是消费方,不需要实现,因为实现会让服务方为我们搞定!跟8001服务提供方的线程远程通信
1 public interface HelloService { 2 String sayHello(String name); 3 }
消费方的springmvc.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 5 xsi:schemaLocation=" 6 http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://code.alibabatech.com/schema/dubbo 9 http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 10 <!--Dubbo的应用名称,通常使用项目名 --> 11 <dubbo:application name="dubbo-consumer"/> 12 <!--配置Dubbo的注册中心地址 --> 13 <dubbo:registry address="zookeeper://192.168.77.132:2181"/> 14 <!-- 让监控 去注册中心 自动找服务 --> 15 <dubbo:monitor protocol="registry"/> 16 <!--配置Dubbo扫描类,将这个类作为服务进行发布 --> 17 <dubbo:annotation package="controller"/> 18 </beans> 19 消费方的web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 6 id="WebApp_ID" version="3.1"> 7 <servlet> 8 <servlet-name>springmvc</servlet-name> 9 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 10 <init-param> 11 <param-name>contextConfigLocation</param-name> 12 <param-value>classpath:spring/spring.xml</param-value> 13 </init-param> 14 </servlet> 15 <servlet-mapping> 16 <servlet-name>springmvc</servlet-name> 17 <url-pattern>/</url-pattern> 18 </servlet-mapping> 19 </web-app>
启动测试
还是跟是实现zookeeper实现分布式锁一样启动哦
- 我们在这里配置了打包之后直接运行
- 所以我们执行打包命令即可,如果出错,先执行clean在执行package
如果执行出错,或者访问失败可以去查找以下问题
- @service注解是否是dubbo的
- linux服务器的防火墙是否关闭
- zookeeper的注册地址是否有误 linux查看本机ip 【ip address】
- 如果想看到自己的服务,可以先搭建dubbo的可视化工具,文章地址
当出现端口地址 且上面没有报错信息时,说明启动成功
可以看到我们的请求成功了