Maven项目结构
maven依赖
<dubbo.version>2.6.2</dubbo.version> <zookeeper.version>3.4.13</zookeeper.version> <curator-framework.version>4.0.1</curator-framework.version> <!--dubbo--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <!--zookeeper--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> <!--zookeeper client--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator-framework.version}</version> </dependency>
- 顶层项目提供包版本管理。
- 接口提供者提供常用pojo类和接口,以及jar依赖。
- 消费者依赖接口提供者并且订阅和使用服务。
- 服务提供者依赖接口提供者,提供service实现和详细服务,然后向zookeeper注册和暴露,被消费者调用。
以windows开启zookeeper
可以看到配置的端口号,我们将往此服务中注册服务
接口提供者
之提供了类和接口,不多赘述
服务提供者
实现类,对service接口进行服务的实现(半注解配置文章最后补充)
public class UserServiceImpl implements UserService { @Override public List<User> findAll() { System.out.println("查询所有~~~"); return null; } }
主要配置SpringDubbo.xml
<!-- 配置dubbo的应用名称--> <dubbo:application name="dubbo-server"/> <!-- 配置dubbo注册中心Zookeeper地址--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 配置dubbo协议名称和服务端口(仅服务提供者配置--> <dubbo:protocol name="dubbo" port="8888"/> <!-- 配置注解扫描 注解使用--> <!-- <dubbo:annotation package="cn.zys.serviceImpl"/>--> <!--指定暴露的服务接口及实例--> <dubbo:service interface="cn.zys.service.UserService" ref="userService"/> <!--配置业务类实例 这种单个配置不适合批量注入,上面注释掉的注解下面详细配置 --> <bean id="userService" class="cn.zys.serviceImpl.UserServiceImpl"/>
web.xml 加载配置文件
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:SpringDubbo.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
最后配置好tomcat运行即可。
消费者
暴露给用户的controller,这里不是用@Controller是因为没使用注解方式
@RequestMapping("user") public class UserController { UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @RequestMapping("getUser") @ResponseBody public String getUser(){ List<User> all = userService.findAll(); System.out.println(all); return "成功"; } }
SpringMvcDubbo.xml
<!-- 扫描controller--> <context:component-scan base-package="cn.zys.controller"/> <!-- 配置dubbo的应用名称--> <dubbo:application name="dubbo-client"/> <!-- 配置dubbo注册中心Zookeeper地址--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 配置dubbo注解包扫描,后续注解远程Service时使用--> <dubbo:consumer check="false"/><!-- 启动时不检查是否有提供者,可避免空指针问题--> <!-- dubbo自动扫包,注解远程Service时使用--> <!-- <dubbo:annotation package="cn.zys.controller"/>--> <!--订阅远程服务对象--> <dubbo:reference id="userService" interface="cn.zys.service.UserService"/> <!-- 配置需要暴露的业务接口及实例--> <!--初始化控制器,并把远程service 注入到controller --> <bean class="cn.zys.controller.UserController" > <property name="userService" ref="userService"/> </bean>
web.xml 用户端需要页面支持
<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*:SpringMvcDubbo.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
分别开启
扩展半注解配置
更改服务提供者xml配置
<dubbo:application name="dubbo-server"/> <!-- 配置dubbo注册中心Zookeeper地址--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 配置dubbo协议名称和服务端口(仅服务提供者配置--> <dubbo:protocol name="dubbo" port="8888"/> <!-- 配置注解扫描 注解使用--> <dubbo:annotation package="cn.zys.serviceImpl"/> <!--指定暴露的服务接口及实例--> <!-- <dubbo:service interface="cn.zys.service.UserService" ref="userService"/>--> <!--配置业务类实例--> <!-- <bean id="userService" class="cn.zys.serviceImpl.UserServiceImpl"/>-->
使用dubbo的注解
更改消费者
<!-- 扫描controller--> <context:component-scan base-package="cn.zys.controller"/> <!-- 配置dubbo的应用名称--> <dubbo:application name="dubbo-client"/> <!-- 配置dubbo注册中心Zookeeper地址--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- 配置dubbo注解包扫描,后续注解远程Service时使用--> <dubbo:consumer check="false"/><!-- 启动时不检查是否有提供者,可避免空指针问题--> <!-- dubbo自动扫包,注解远程Service时使用--> <dubbo:annotation package="cn.zys.controller"/>
重启测试