springmvc配置dubbo两种方式
dubbo+zookeeper
在读本文前建议先掌握dubbo的基本知识
dubbo官网地址:http://dubbo.apache.org/zh/
主要步骤:
将服务提供者注册到注册中心,暴露服务,消费者引用
准备
1、在服务器或者本地搭建好zookeeper,启动zoookeeper
2、在服务器或者本地搭建好dubbo-admin,启动dubbo
XML方式配置
配置提供者
引入jar包
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.4</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> <exclusions> <!-- 排除log4j1的方式 --> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <!-- 排除logback的方式 --> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
配置spring-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://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 定义提供方应用信息,用于计算依赖关系。在dubbo-admin/dubbo-monitor 会显示这个名字,易识别 --> <dubbo:application name="admin-provider" owner="admin" organization="dubbox"/> <!-- 使用zookeeper 注册中心暴露服务,注意要先开启 zookeeper --> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 用dubbo协议在9003端口暴露服务 --> <dubbo:protocol name="dubbo" port="9003"/> <!-- 监控 监控中心通过注册中心的信息自动发现服务并予以监控。--> <dubbo:monitor protocol="registry"/> <!-- 用dubbo 协议实现定义好的 api 接口 --> <dubbo:service interface="com.dubbo.service.UserService" ref="userService" protocol="dubbo"/> <!-- 具体实现接口的bean --> <bean id="userService" class="com.dubbo.service.impl.UserServiceImpl"/> </beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
定义接口和实现类
public interface UserService { String getName(String userId); } @Service public class UserServiceImpl implements UserService { @Override public String getName(String userId) { return "Hello dubbo,the userid is"+userId; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
配置消费者
引入和提供者一样的jar包
配置spring-dubbo-consumer.xml配置文件
<!-- 定义提供方应用信息,用于计算依赖关系。在dubbo-admin/dubbo-monitor 会显示这个名字,方便识别 --> <dubbo:application name="demo-consumer" owner="demo" organization="dubbox"/> <!-- 向zookeeper 订阅provider 的地址,由zookeeper 定时推送 --> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 监控 监控中心通过注册中心的信息自动发现服务并予以监控。--> <dubbo:monitor protocol="registry"/> <!-- 使用dubbo 协议调用定义好的 api 接口 --> <dubbo:reference id="userService" interface="com.dubbo.service.UserService"/> </beans>
1
2
3
4
5
6
7
8
9
10
11
12
如果你的消费者和生产者不在同一个项目,需要把提供者的接口通过jar包的方式引入,当然直接复制过去也是可以的。
引用接口,在你的controller层注入接口
@Autowired private UserService userService;
1
2
使用注解方式配置
配置提供者
项目中Maven引入Jar包
配置spring-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://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="zydemo-provider"/> <!-- 使用ZK注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 用Dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="7003"/> <!-- 扫描注解包路径,多个包用逗号分隔 --> <dubbo:annotation package="com.xyh.weixin.dubbo"/> </beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
web.xml配置context-param
<context-param> <param-name>contextConfigLocation</param-name> <param-value> <!-- 先加载dubbo生产者的配置文件 --> classpath:spring/spring-dubbo-provider.xml, classpath:spring/applicationContext.xml, classpath:spring/applicationSecurity.xml </param-value> </context-param>
1
2
3
4
5
6
7
8
9
定义接口和实现类
public interface UserService { String getName(String userId); } @Service public class UserServiceImpl implements UserService { @Override public String getName(String userId) { return "Hello dubbo,the userid is"+userId; } }
1
2
3
4
5
6
7
8
9
10
11
注意:import com.alibaba.dubbo.config.annotation.Service;标注对外暴露的dubbo接口实现类,这里不要写错了!
配置消费者
项目中Maven引入Jar包
配置spring-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://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="zydemo-consumer"/> <!-- 使用ZK注册中心暴露服务地址 --> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 扫描注解包路径,多个包用逗号分隔 --> <dubbo:annotation package="com.xyh.weixin.web.wgjypt"/> </beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
web.xml定制初始化参数
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param><!-- 加载dubbo 和 mvc的配置文件 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-dubbo-consumer.xml,classpath:spring/applicationServlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
1
2
3
4
5
6
7
8
9
引入接口
@Reference private UserService userService;
1
2
注意:import com.alibaba.dubbo.config.annotation.Reference;
需要先跑提供者在跑消费者,不然会报空指针,启动成功后在dubbo管理页面上看是否成功注册。
奉上zookeeper+dubboadmin