跳至内容
wiki
用户工具
登录
站点工具
工具
显示页面
修订记录
反向链接
最近更改
媒体管理器
网站地图
登录
最近更改
媒体管理器
网站地图
您的足迹:
分享:技术:dubbo:dubbo项目示例
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== dubbo项目示例 ====== ===== 介绍 ===== Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 官网:[[http://dubbo.io/Home-zh.htm|dubbo.io]] 其核心部分包含: * 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 * 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 * 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。 Dubbo能做什么? * 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 * 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 * 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。 ===== 示例项目 ===== 使用zookeeper作为注册中心,server项目注册服务UserService,client项目消费服务UserService ===== server项目 ===== 注意:server-service模块必须deploy到nexus上,让消费项目依赖 ==== pom.xml ==== <code xml pom.xml> <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> <exclusions> <exclusion> <artifactId>junit</artifactId> <groupId>junit</groupId> </exclusion> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency> </code> ==== application-provider.xml ==== <code xml application-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应用名称 --> <dubbo:application name="server" /> <!-- dubbo注册地址 --> <dubbo:registry address="zookeeper://121.40.171.96:2181" /> <!-- dubbo注册端口 --> <dubbo:protocol name="dubbo" port="-1" /> <!-- 监听注册 --> <dubbo:monitor protocol="registry" /> <!-- dubbo对外开放接口 --> <dubbo:service interface="com.gxx.dubbo.server.service.UserService" ref="userService" version="1.0.0" retries="0" timeout="10000" /> </beans> </code> ==== UserService.java ==== <code java UserService.java> package com.gxx.dubbo.server.service; import com.gxx.dubbo.server.model.vo.User; /** * 用户服务接口 * @author Gxx */ public interface UserService { /** * 根据id查询用户 * @return */ public User selectUserById(int id); } </code> ==== UserServiceImpl.java ==== <code java UserServiceImpl.java> package com.gxx.dubbo.server.biz.impl; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.gxx.dubbo.server.dao.UserMapper; import com.gxx.dubbo.server.model.vo.User; import com.gxx.dubbo.server.service.UserService; /** * 用户服务接口实现类 * @author Gxx */ @Service("userService") public class UserServiceImpl implements UserService { /** * 日志处理器 */ Logger logger = Logger.getLogger(UserServiceImpl.class); /** * 用户实体操作类 */ @Autowired private UserMapper userMapper; /** * 根据id查询用户 * @return */ @Override @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public User selectUserById(int id) { return userMapper.selectByPrimaryKey(id); } } </code> ===== client项目 ===== 注意:client需要依赖server-service模块 ==== pom.xml ==== <code xml pom.xml> <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> <exclusions> <exclusion> <artifactId>junit</artifactId> <groupId>junit</groupId> </exclusion> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> </exclusions> </dependency> <!-- 依赖其他模块开始 --> <dependency> <groupId>com.gxx.dubbo</groupId> <artifactId>server-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- 依赖其他模块结束 --> </code> ==== application-consumer.xml ==== <code xml application-consumer.xml> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns="http://www.springframework.org/schema/beans" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"> <!-- dubbo应用名称 --> <dubbo:application name="client" /> <!-- dubbo注册地址 --> <dubbo:registry address="zookeeper://121.40.171.96:2181" /> <!-- 消费接口类开始 --> <dubbo:reference id="userService" cluster="failfast" interface="com.gxx.dubbo.server.service.UserService" lazy="true" check="false" version="1.0.0" timeout="10000" /> <!-- 消费接口类结束 --> </beans> </code> ==== RemoteService.java ==== <code java RemoteService.java> package com.gxx.dubbo.client.remote.service; import com.gxx.dubbo.server.model.vo.User; /** * 远程服务接口 * @author Gxx */ public interface RemoteService { /** * 根据id查询用户 * @return */ public User selectUserById(int id); } </code> ==== RemoteServiceImpl.java ==== <code java RemoteServiceImpl.java> package com.gxx.dubbo.client.remote.impl; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gxx.dubbo.client.remote.service.RemoteService; import com.gxx.dubbo.server.model.vo.User; import com.gxx.dubbo.server.service.UserService; /** * 远程服务接口实现类 * @author Gxx */ @Service("remoteService") public class RemoteServiceImpl implements RemoteService { /** * 日志记录器 */ Logger logger = Logger.getLogger(RemoteServiceImpl.class); /** * 用户服务接口 */ @Autowired private UserService userService; /** * 根据id查询用户 * @return */ public User selectUserById(int id) { return userService.selectUserById(id); } } </code> ==== RemoteController.java ==== <code java RemoteController.java> package com.gxx.dubbo.client.web; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.gxx.dubbo.client.remote.service.RemoteService; import com.gxx.dubbo.server.model.vo.User; /** * 远程控制类 * @author Gxx */ @Controller @RequestMapping("/remote/") public class RemoteController { /** * 日志处理器 */ private final Logger logger = Logger.getLogger(RemoteController.class); @Autowired private RemoteService remoteService; /** * 远程查询用户 * @return */ @RequestMapping(value = "/get") public @ResponseBody String get(HttpServletRequest request) { logger.info("远程查询用户开始~"); User user = remoteService.selectUserById(Integer.parseInt(request.getParameter("id"))); logger.info("远程查询用户结束~"); return user == null ? "查询不到用户!" : user.toString(); } } </code> ===== 部署测试 ===== 把server-web和client-web都部署到tomcat下,访问 <code>http://localhost:9090/client-web/remote/get.htm?id=9</code> 得到 <code>User [id=9, name=lqy, password=123qwe, createDate=20150618, createTime=000000]</code> 可以看到日志client.log <code> 2017-05-30 11:18:49,384 INFO 远程查询用户开始~ 2017-05-30 11:18:50,420 INFO 远程查询用户结束~ </code> 日志server.log <code> 2017-05-30 11:18:50,005 INFO 接收到消费者请求,根据ID=[9]查询用户! </code> ===== zkui ===== server-web和client-web都部署之后,在zookeeper管理界面zkui上可以看到,consumer和provider的信息 {{:分享:技术:dubbo:1.jpeg?800|}} ===== dubbo-admin ===== server-web和client-web都部署之后,在zookeeper管理界面dubbo-admin上可以看到,consumer和provider的信息 {{:分享:技术:dubbo:3.jpeg?800|}} {{:分享:技术:dubbo:4.jpeg?800|}} ===== 附源码 ===== {{:分享:技术:dubbo:server.zip|}} {{:分享:技术:dubbo:client.zip|}} ===== 生成archetype原型 ===== 生成archetype,以后有相关项目可以根据原型生成,速度比较快。 {{:分享:技术:dubbo:2.jpeg?800|}}
分享/技术/dubbo/dubbo项目示例.1543324553.txt.gz
· 最后更改: 2018/11/27 21:15 由
gxx
页面工具
显示页面
修订记录
反向链接
回到顶部