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"/>
重啟測試