# 8 快速入门 dubbo

8 快速入门 dubbo

所需资料

注册中心 Zookeeper

安装 zookeeper

  • 官方推荐使用 zookeeper 注册中心;
  • 注册中心负责服务地址的注册与查找,相当于目录服务;
  • 服务提供者和消费者只在启动时与注册中心交互,注册中不转发请求,压力较小;
  • Zookeeper 是 apache hadoop 的子项目,是一个树形的目录服务,支持变更推送,适合作为
    dubbo 的服务注册中心,工业强度较高,可用于生产环境;

入门 demo 的架构

注意

如果在粘贴这些web.xml 或者pom.xml里面build里面的标签发送这样的报错提示,注意哦 这可能不是错误,不会影响到我们项目的运行。

服务提供者

1、一个空的maven项目
2、提供一个服务接口即可

项目目录结构

图中红框的需要我们创建

提供方的pom.xml

各种依赖请严格按照下面的版本

  • 记得要更新pom文件哦!
  • 当dependencies中出现依赖的版本信息 说明依赖引入成功了
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的可视化工具,文章地址

当出现端口地址 且上面没有报错信息时,说明启动成功

可以看到我们的请求成功了

原文链接:# 8 快速入门 dubbo - look-word - 博客园 (cnblogs.com)

posted @ 2022-07-19 08:46  SHINEJACKXN  阅读(20)  评论(0编辑  收藏  举报