Dubbo框架的使用操作文档.docx

上传人:b****3 文档编号:3752684 上传时间:2022-11-25 格式:DOCX 页数:29 大小:555.16KB
下载 相关 举报
Dubbo框架的使用操作文档.docx_第1页
第1页 / 共29页
Dubbo框架的使用操作文档.docx_第2页
第2页 / 共29页
Dubbo框架的使用操作文档.docx_第3页
第3页 / 共29页
Dubbo框架的使用操作文档.docx_第4页
第4页 / 共29页
Dubbo框架的使用操作文档.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

Dubbo框架的使用操作文档.docx

《Dubbo框架的使用操作文档.docx》由会员分享,可在线阅读,更多相关《Dubbo框架的使用操作文档.docx(29页珍藏版)》请在冰豆网上搜索。

Dubbo框架的使用操作文档.docx

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

*/

publicListgetAllByCity(Stringcity);

/**

*验证用户名与密码是否正确

*@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;

}

publicListgetAllByCity(Stringcity){

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:

\

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1