Dubbo框架的使用操作文档.docx
- 文档编号:3752684
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:29
- 大小:555.16KB
Dubbo框架的使用操作文档.docx
《Dubbo框架的使用操作文档.docx》由会员分享,可在线阅读,更多相关《Dubbo框架的使用操作文档.docx(29页珍藏版)》请在冰豆网上搜索。
Dubbo框架的使用操作文档
Dubbo框架的使用操作文档
文件版本:
V1.0
文件编号:
发布日期:
2016年10月17日
编制:
审核:
批准:
修订版本号
修订人
修订日期
修订描述
1.0
2016年10月17日
创建
目录
1ZooKeeper的配置安装1
1.1ZooKeeper简介1
1.2详细安装文档说明参考1
2Dubbo-admin配置安装2
2.1管理平台的简介2
2.2详细安装文档的参考2
3创建使用Dubbo框架的Maven项目3
3.1创建Maven项目sinoep-interface-user3
3.1.1创建实体类3
3.1.2创建接口3
3.1.3在Pom.xml文件中引入依赖的包3
3.1.4打包3
3.2创建Maven项目sinoep-common-config3
3.2.1创建全局变量类3
3.2.2创建或者引入*.properties配置3
3.2.3在Pom.xml文件中引入依赖的包3
3.2.4打包3
3.3创建Maven项目sinoep-common-core3
3.3.1创建引入核心公用的类3
3.3.2在Pom.xml文件中引入依赖的包3
3.3.3打包3
3.4创建Maven项目sinoep-common-parent3
3.4.1创建项目3
3.4.2在Pom.xml文件中引入依赖的包3
3.4.3打包3
3.5创建Maven项目sinoep-service-user(服务提供者)3
3.5.1在Pom.xml文件中引入依赖的包3
3.5.2编写接口实现类3
3.5.3在resource目录下编写两个配置文件3
3.5.4编写测试类启动服务3
3.5.5打包3
3.6创建Maven项目sinoep-web-sso(消费者)3
3.6.1在Pom.xml文件中引入依赖的包3
3.6.2创建Controller或者Action类3
3.6.3在resource目录下编写两个配置文件3
3.6.4部署到tomact运行3
4创建使用Dubbo框架的普通web项目4
5Dubbo开发中restful风格的远程调用28
5.1快速入门28
5.1.1快速入门28
5.2REST服务提供端详解29
5.2.1HTTPPOST/GET的实现29
5.2.2Annotation放在接口类还是实现类29
5.2.3JSON、XML等多数据格式的支持29
5.2.3.1@Consumers注解使用的说明29
5.2.4中文字符支持30
5.2.5XML数据格式的额外要求30
5.2.6定制序列化29
5.2.7获取上下文(Context)信息29
6已开发的demo项目参考34
ZooKeeper的配置安装
简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。
它是一个为分布式应用提供一致性服务的软件,提供的功能包括:
配置维护、名字服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
理解Zookeeper的算法可代入现实生活的“投票选举”。
Zookeeper字面意思是“动物园管理员”,它是一个分布式的服务框架,基于FastPaxos算法。
Zookeeper分布式集群里,主要分为三个角色:
Leader接收所有Follower的提案请求并统一协调发起提案的投票,负责与所有的Follower进行内部的数据交换(同步);
Follower直接为客户端服务并参与提案的投票,同时与Leader进行数据交换(同步);
Observer直接为客户端服务但并不参与提案的投票,同时也与Leader进行数据交换(同步)。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
安装配置文档
Dubbo-admin配置安装
简介
dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin。
通过dubbo-admin可以对消费者和提供者进行管理。
dubbo管理控制台开源部分主要包含:
提供者 路由规则 动态配置 访问控制 权重调节 负载均衡 负责人,等管理功能。
安装配置文档
3创建使用Dubbo框架的Maven项目
备注(按照步骤完成,所用的工程都是maven工程)
在搭建Dubbo框架之前,先了解Dubbo框架的工作流程。
服务提供者先启动start,然后向注册中心注册暴露服务。
消费者向注册中心订阅服务。
监控中心统计服务的调用次数和调用时间的监控中心
3.1新建服务的接口及传输对象的项目。
接口用于下放给消费者,供消费者调用。
项目结构如下
代码
User.Java
/**
*用户Model
*@author***
*
*/
@Entity
@Table(name="sys_user_basicinfo")
publicclassUserimplementsSerializable{
@Id
@GeneratedValue
privateLongid;
privateStringusername;
publicUser(){
super();
}
publicUser(Stringusername,Longid){
this.username=username;
this.id=id;
}
publicUser(Longid){
this.id=id;
}
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
}
接口UserService.java
/**
*根据用户ID获取用户
*@paramuserid
*@return
*/
UsergetUserById(Longid);
/**
*获取对应城市下的全部用户
*@paramcity
*@return
*/
publicList
/**
*验证用户名与密码是否正确
*@paramuserName
*@parampassWord
*@return
*/
publicUserlogin(StringuserName,StringpassWord);
/**
*测试接口
*@return
*/
publicStringisTest(Stringname);
}
Pom.xml文件中配置需要依赖的包
打开下图红框的部分
内容中需要配置的地方,加入依赖的包。
3.2创建服务提供者(即:
服务接口的实现方)
服务提供者主要把服务注册暴露在注册中心,接口的实现类。
项目结构
3.2.1在Pom.xml文件中添加依赖包,主要引入需要实现的接口。
(否则写实现类时候,报错)
3.2.2编写接口实现类UserServiceImpl.java
代码
@Service
publicclassUserServiceImplimplementsUserService{
@Autowired
publicUserDaouserDao;
publicStringisTest(Stringname){
return"UserServiceImpl:
"+name;
}
publicList
returnuserDao.getAllByCity(city);
}
publicUserlogin(StringuserName,StringpassWord){
returnuserDao.login(userName,passWord);
}
publicUsergetUserById(Longid){
return(User)userDao.getById(id);
}
publicUsersaveUser(Demouser){
//TODOAuto-generatedmethodstub
returnnull;
}
publicUsersaveUser(Useruser){
//TODOAuto-generatedmethodstub
returnnull;
}
}
3.2.3编写完实现类,需要把服务接口注册暴露给注册中心,需要在下图红框内的配置文件dubbo-provider.xml中暴露服务。
暴露服务的具体配置如下
--暴露服务的名称-->
applicationname="sso-service-user"/> --配置zookeeper注册中心的ip地址--> registryprotocol="zookeeper"address="${dubbo.registry.address}"timeout="50000"/> --dubbo监控中心 monitorprotocol="registry"/> --使用multicast广播注册中心暴露服务地址--> protocolname="dubbo"port="9099"/> --配置暴露的接口服务--> serviceinterface="com.sinosoft.sinoep.user.service.UserService"ref="userService"/> 3.2.4完成把服务接口注册暴露给注册中心,需要编写一个启动测试类。 项目中的路径如下图 调用Dubbo服务时,先把服务提供者启动,向注册中心注册暴露服务,需要编写一个启动程序。 代码 publicclassDubboProvider{ privatestaticfinalLoglog=LogFactory.getLog(DubboProvider.class); publicstaticvoidmain(String[]args){ try{ ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext("classpath: spring/spring-context.xml"); context.start(); UserServiceUserService=(UserService)SpringBeanUtils.getBean("userService"); log.info(UserService.isTest("kjx")); }catch(Exceptione){ log.error("==DubboProvidercontextstarterror: ",e); } synchronized(DubboProvider.class){ while(true){ try{ DubboProvider.class.wait(); }catch(InterruptedExceptione){ log.error("==synchronizederror: ",e); } } } } } 3.3创建服务消费者 项目结构如下 消费者主要向注册中心订阅服务。 3.3.1Pom.xml文件中配置需要依赖的包 Pom.xml文件中需要增加的内容(引入需要调用方法的接口) 3.3.2向注册中心订阅服务,需要新建配置文件Dubbo-consumer.xml,配置路径如下 需要在红框文件里面增加如下内容 --消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样--> applicationname="sinoep-web-sso"/> --使用zookeeper注册中心暴露服务地址--> --注册中心地址--> registryprotocol="zookeeper"address="${dubbo.registry.address}"/> --需要调用用户服务接口,订阅的服务--> referenceinterface="com.sinoep.user.service.UserService"id="userService"check="false"protocol="dubbo"/> 3.3.3编写消费者代码,调用订阅的服务 代码 publicclassDubboConsumer{ privatestaticfinalLoglog=LogFactory.getLog(DubboConsumer.class); publicstaticvoidmain(String[]args){ try{ ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext("classpath: spring/spring-context.xml"); context.start(); UserServiceuserService=(UserService)SpringBeanUtils.getBean("userMsgService"); Useruserdb=userService.getUserById(6452L); log.info("userdb: "+userdb.getBirth_day()); System.out.println("实现类: "+userService.isTest("kjx")); }catch(Exceptione){ log.error("==DubboProvidercontextstarterror: ",e); } synchronized(DubboConsumer.class){ while(true){ try{ DubboConsumer.class.wait(); }catch(InterruptedExceptione){ log.error("==synchronizederror: ",e); } } } } } 3.4Dubbo服务既是消费者又是服务提供者 按照上述方法新建Dubbo服务,新建接口sinoep-interface-pk和服务sinoep-service-pk,注册暴露到注册中心。 例如: sinoep-service-user服务既是消费者有是服务的的提供者, sinoep-service-user消费了sinoep-interface-pk提供的服务, sinoep-service-user为sinoep-web-sso提供了服务。 如下图 sinoep-service-user既是消费者又为服务提供者 3.4.1在Pom.xml文件中添加依赖包,主要引入调用方法的接口。 (否则写调用的时候,报错) 3.4.2项目中引入两个配置文件dubboconsumer.xml,dubbo-provider.xml dubbo: application只能配置一个.如下图 3.4.3sinoep-service-user系统中直接配置对应消费服务。 配置文件中无需配置端口,如果为同一注册中心,无需再次添加注册中心。 可使用相同的注册中心配置,如下只配置调用的接口。 referenceinterface="com.sinosoft.sinoep.pk.service.PrimaryKeyService"id="primaryKeyService"check="false"protocol="dubbo"timeout="50000"/> 3.4.4sinoep-service-user系统中填写对应对外提供的协议并配置端口 如果同一台服务器部署上述两服务,sinoep-service-user系统端口需与sinoep-interface-pk系统区分。 3.4.5启动服务,测试。 本地先启动一个服务提供者的dubbo服务sinoep-interface-pk,系统sinoep-service-user系统可直接调用已订阅sinoep-interface-pk系统中的服务 4创建使用Dubbo框架的普通web项目 5Dubbo开发中restful风格的远程调用 5.1快速入门 在dubbo中开发一个REST风格的服务会比较简单,下面以一个注册用户的简单服务为例说明。 这个服务要实现的功能是提供如下URL(注: 这个URL不是完全符合REST的风格,但是更简单实用): http: //localhost: 8080/users/register 而任何客户端都可以将包含用户信息的JSON字符串POST到以上URL来完成用户注册。 首先,开发服务的接口: PublicclassUserService{ VoidregisterUser(Useruser); } 然后,开发服务的实现: @Path("users") PublicclassUserServiceImplimplementsUserService{ @POST @Path("register") @Consumes({MediaType.APPLICATION_JSON}) PublicvoidregisterUser(Useruser){ //savetheuser... } } 5.2REST服务提供端详解 5.2.1HTTPPOST/GET的实现 REST服务中虽然建议使用HTTP协议中四种标准方法POST、DELETE、PUT、GET来分别实现常见的“增删改查”,但实际中,我们一般情况直接用POST来实现“增改”,GET来实现“删查”即可(DELETE和PUT甚至会被一些防火墙阻挡)。 前面已经简单演示了POST的实现,在此,我们为UserService添加一个获取注册用户资料的功能,来演示GET的实现。 这个功能就是要实现客户端通过访问如下不同URL来获取不同ID的用户资料。 http: //localhost: 8080/users/1001 http: //localhost: 8080/users/1002 http: //localhost: 8080/users/1003 当然,也可以通过其他形式的URL来访问不同ID的用户资料,例如: http: //localhost: 8080/users/load? id=1001 JAX-RS本身可以支持所有这些形式。 但是上面那种在URL路径中包含查询参数的形式(http: //localhost: 8080/users/1001)更符合REST的一般习惯,所以更推荐大家来使用。 下面我们就为UserService添加一个getUserById1(Longid)方法来实现这种形式的URL访问: //http: //192.168.1.103: 9090/usermsg/6452.json @GET @Path("{id: \\d+}") @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) publicUsergetUserById1(@PathParam("id")Longid){ return(User)userDao.getById(id); } @GET: 指定用HTTPGET方法访问 @Path("{id: \d+}"): 根据上面的功能需求,访问getUserById1(Longid)的URL应当是“http: //localhost: 8080/users/+任意数字",并且这个数字要被做为参数传入getUserById1(Longid)方法。 这里的annotation配置中,@Path中间的{id: xxx}指定URL相对路径中包含了名为id参数,而它的值也将被自动传递给下面用@PathParam("id")修饰的方法参数id。 {id: 后面紧跟的\d+是一个正则表达式,指定了id参数必须是数字。 @Produces({MediaType.APPLICATION_JSON}): 指定getUserById1(Longid)输出JSON格式的数据。 框架会自动将User对象序列化为JSON数据。 5.2.2Annotation放在接口类还是实现类 在Dubbo中开发REST服务主要都是通过JAX-RS的annotation来完成配置的,在上面的示例中,我们都是将annotation放在服务的实现类中。 但其实,我们完全也可以将annotation放到服务的接口上,这两种方式是完全等价的,例如: @Path("users")publicinterfaceUserService{ @GET @Path("{id: \
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Dubbo 框架 使用 操作 文档