1.Dubbo 概述
2. 3种配置方法
2.1基于XML配置
2.2基于注解的配置
2.3基于API的配置
1.Dubbo 概述
Dubbo 是还蛮火的RPC框架,消费者服务者模式。与rest可以跨语言调用不同,Dubbo只限于两者都是JAVA调用。下图为基本框架图。
2. 三种配置方法
dubbo项目除了一堆依赖外pom.xml还是要添加下DemoService 这个公共接口的。
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-demo-interface</artifactId>
<version>${project.parent.version}</version>
</dependency>
2.1基于XML配置
2.1.1provider.xml
我提供什么服务呢?会把这个服务 DemoServiceImpl 配置成一个 Spring Bean,并作为 DemoService 服务暴露出去。
<!-- 配置为 Spring Bean -->
<bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/>
<!-- 作为 Dubbo 服务暴露出去 -->
<dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/>
2.1.2 指定服务中心 如果用的是zookeeper就写成下面这样
<!-- Zookeeper 地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
2.1.3 消费者调用
//Application 中写个 main() 方法,指定 Spring 配置文件并启动ClassPathXmlApplicationContext 即可。
ClassPathXmlApplicationContext ctx =new ClassPathXmlApplicationContext("beans.xml");
demoService service=(demoService) ctx.getBean("demoService");
2.2基于注解的配置
就是把xml全换成注解即可,网上找了段代码示意一下。
public class Application {
public static void main(String[] args) throws Exception {
// 使用AnnotationConfigApplicationContext初始化Spring容器,
// 从ProviderConfiguration这个类的注解上拿相关配置信息
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(
ProviderConfiguration.class);
context.start();
System.in.read();
}
@Configuration // 配置类
// @EnableDubbo注解指定包下的Bean都会被扫描,并做Dubbo服务暴露出去
@EnableDubbo(scanBasePackages = "org.apache.dubbo.demo.provider")
// @PropertySource注解指定了其他配置信息
@PropertySource("classpath:/spring/dubbo-provider.properties")
static class ProviderConfiguration {
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setAddress("zookeeper://127.0.0.1:2181");
return registryConfig;
}
}
}
2.3基于API的配置
2.3.1provider------ServiceConfig类的编写
/ 创建一个ServiceConfig的实例,泛型参数是业务接口实现类,
// 即DemoServiceImpl
ServiceConfig<DemoServiceImpl> service = new ServiceConfig<>();
// 指定业务接口
service.setInterface(DemoService.class);
// 指定业务接口的实现,由该对象来处理Consumer的请求
service.setRef(new DemoServiceImpl());
// 获取DubboBootstrap实例,这是个单例的对象
DubboBootstrap bootstrap = DubboBootstrap.getInstance();
//生成一个 ApplicationConfig 的实例、指定ZK地址以及ServiceConfig实例
bootstrap.application(new ApplicationConfig("dubbo-demo-api-provider"))
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.service(service)
.start()
.await();
2.3.2consumer ------
// 创建ReferenceConfig,其中指定了引用的接口DemoService
ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
reference.setInterface(DemoService.class);
reference.setGeneric("true");
// 创建DubboBootstrap,指定ApplicationConfig以及RegistryConfig
DubboBootstrap bootstrap = DubboBootstrap.getInstance();
bootstrap.application(new ApplicationConfig("dubbo-demo-api-consumer"))
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.reference(reference)
.start();
// 获取DemoService实例并调用其方法
DemoService demoService = ReferenceConfigCache.getCache()
.get(reference);
String message = demoService.sayHello("dubbo");
System.out.println(message);
总结