dubbo学习:
Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
- 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1.3-b06</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- maven导入dubbo和zookeeper的包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.5</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<!-- spring 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.14.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>3.2.14.RELEASE</version>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>
</dependencies>
dubbo服务器service:
该服务通过dubbo配置文件上传到zookeeper上;
包含一个接口,一个接口的实现类,以及开启服务的类。‘
spring配置文件中将接口的实现类注入。
配置dubbo.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">
<!-- 指定web服务名字 -->
<dubbo:application name="Dubbo"/>
<!-- 声明服务注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.92.129:2181"/>
<!-- 指定传输层通信协议 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 暴露你的服务地址 -->
<dubbo:service
ref="demoService1"
interface="com.edl.dubbo.service.IDemoService"
protocol="dubbo"
/>
</beans>
调用service的项目的配置:
包含一个接口,不需要实现,调用service的时候,由sevice里的接口的实现类实现。
代码:
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");//的到spring配置文件
IDemoService demoService1=(IDemoService) ctx.getBean("demoService1");//从配置文件中的到接口
System.out.println(demoService1.methodInvoke());
dubbo的配置文件:
<?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">
<!-- 指定web服务名字 -->
<dubbo:application name="Dubbo_refer"/>
<!-- 声明服务注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.92.129:2181"/>
<!-- 指定传输层通信协议 -->
<dubbo:protocol name="dubbo" port="20881"/>
<!-- 暴露你的服务地址 -->
<dubbo:reference
id="demoService1"
interface="com.edl.dubbo.service.IDemoService"
protocol="dubbo"
/> //调用service中的demoService1类
</beans>
dubbo的其他属性:
- <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
- <dubbo:reference/> 引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
- <dubbo:protocol/> 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
- <dubbo:application/> 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
- <dubbo:module/> 模块配置,用于配置当前模块信息,可选。
- <dubbo:registry/> 注册中心配置,用于配置连接注册中心相关信息。
- <dubbo:monitor/> 监控中心配置,用于配置连接监控中心相关信息,可选。
- <dubbo:provider/> 提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选。
- <dubbo:consumer/> 消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选。
- <dubbo:method/> 方法配置,用于ServiceConfig和ReferenceConfig指定方法级的配置信息。
- <dubbo:argument/> 用于指定方法参数配置。
-
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<
dubbo:annotation
package
=
"com.foo.bar.service"
/>
-
<
dubbo:annotation
/>
<
context:component-scan
base-package
=
"com.foo.bar.service"
>
<
context:include-filter
type
=
"annotation"
expression
=
"com.alibaba.dubbo.config.annotation.Service"
/>
</
context:component-scan
>
<
dubbo:reference
interface
=
"com.foo.BarService"
check
=
"false"
/> check属性:表示是否开启检查
< dubbo:service cluster = "failsafe" /> cluster:集群容错。默认failover,
Failover Cluster
Failfast Cluster
Failsafe Cluster
Failback Cluster
Forking Cluster
Broadcast Cluster
<!-- 多注册中心配置 -->
<
dubbo:registry
id
=
"hangzhouRegistry"
address
=
"10.20.141.150:9090"
/>
<
dubbo:registry
id
=
"qingdaoRegistry"
address
=
"10.20.141.151:9010"
default
=
"false"
/>
<!-- 向多个注册中心注册 -->
<
dubbo:service
interface
=
"com.alibaba.hello.api.HelloService"
version
=
"1.0.0"
ref
=
"helloService"
registry
=
"hangzhouRegistry,qingdaoRegistry"
/>
具体参见dubbo官网的用户指南。
|