Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
它的特性如下
面向接口代理的高性能RPC调用
智能负载均衡
服务自动注册与发现
高度可扩展能力
运行期流量调度
可视化的服务治理与运维
Talk is cheap, Show me the code。现在来着手搭建一个Dubbo项目吧。
搭建一个xml配置的Dubbo项目
创建三个项目
service-api 服务提供者和服务消费者共用的接口
service-consumer 服务消费者
service-provider 服务提供者
共用的接口
先在service-api定义一个公用接口
public interface DemoService { String sayHello(String name); }
服务提供者
服务提供者service-provider提供一个DemoService的实现类
public class DemoServiceImpl implements DemoService { @Override public String sayHello(String name) { System.out.println("[" + LocalDate.now() + "] Hello " + name ); return "Hello " + name; } }
编写xml配置文件
配置应用名称
<dubbo:application name="demo-provider"/>
配置注册中心
可以使用Multicast、Redis、Zookeeper、Simple这四个作为注册中心。
<dubbo:registry address="multicast://224.5.6.7:1234"/>
配置协议
默认为dubbo
<dubbo:protocol name="dubbo" port="20880"/>
定义bean
然后定义bean,以及将bean作为服务暴露出去
<bean id="demoService" class="com.learnDubbo.demo.provider.DemoServiceImpl"/> <dubbo:service interface="com.learnDubbo.demo.DemoService" ref="demoService"/>
main函数
编写一个main函数用于启动服务提供者
public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml"); context.start(); System.in.read();//用于阻塞函数,使其一直运行}
服务消费者
服务消费者需要调用service-provider 服务提供者提供的DemoService实现类
同样需要编写xml文件,配置文件和服务提供者的类似,不同的是需要将暴露服务的配置修改为引用服务的配置,如下
引用服务
<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/>
main函数
编写一个main函数用于启动服务消费者,然后一直循环调用服务提供者提供的服务
public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml"); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); // 调用服务提供者提供的服务 while (true) { try { Thread.sleep(1000); String hello = demoService.sayHello("Dubbo"); // call remote method System.out.println(hello); // get result } catch (Throwable throwable) { throwable.printStackTrace(); } } }
测试
先启动service-provider项目,然后在启动service-consumer,输出结果如下
搭建一个注解的Dubbo项目
服务提供者和服务消费者共用的接口还是使用service-api,新建下面两个项目
service-consumer-annotation 基于注解的服务消费者
service-provider-annotation 基于注解的服务提供者
基于注解的服务提供者
新建一个springboot项目
同样需要提供一个DemoService的实现类,且在类上增加@Service
注解
注:是com.alibaba.dubbo.config.annotation.Service
不是org.springframework.stereotype.Service
别导错了
接下来需要增加dubbo的配置类
@Configurationpublic class DubboConfiguration { /** * 对应xml配置:<dubbo:application name="demo-provider"/> * @return */ @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("demo-provider--annotation"); return applicationConfig; } /** * 对应xml配置:<dubbo:registry address="multicast://224.5.6.7:1234"/> * @return */ @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress("multicast://224.5.6.7:1234"); return registryConfig; } }
最后一步在启动类上增加注解@DubboComponentScan(basePackages = "com.learnDubbo.demo.provider.service")
basePackages自行修改为提供服务类所在的包路径
基于注解的服务消费者
也是需要有一个配置类,和服务提供者类似,这里就不贴代码了
接下来创建一个Controller,用于测试结果,代码如下
@RestControllerpublic class DemoController { @Reference private DemoService demoService; @GetMapping("sayHello") public String sayHello(){ return demoService.sayHello("Dubbo"); } }
@Reference
注解表示引用服务类似于xml配置
<dubbo:reference id="demoService" interface="com.learnDubbo.demo.DemoService"/>
在项目启动类上同样需要注解@DubboComponentScan
指定dubbo扫描路径
测试
同xml配置的一样,需要先启动服务提供者
配置信息
配置信息主要包括3大块,注册中心、协议和schema配置
注册中心
注册中心总共有4个,如下
注册中心 | 简要说明 | dubbo文档介绍 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Multicast | 不需要启动任何中心节点,只要广播地址一样,就可以互相发现。 | 链接 | ||||||||||||||||||||||||||||||
zookeeper | Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。 | 链接 | ||||||||||||||||||||||||||||||
Redis | 一个高效的 KV 存储服务器 , 从 2.1.0 版本开始支持 。 | 链接 | ||||||||||||||||||||||||||||||
Simple | 一个普通的 Dubbo 服务,可以减少第三方依赖,使整体通讯方式一致。 | 对应的redis会产生如下数据 可以看到有两个key,分别对应服务提供者和消费者。两个key对应的数据类型为Hash,可以看到服务消费者key的数据如下 1) "consumer://192.168.79.170/com.learnDubbo.demo.DemoService?application=demo-consumer&category=consumers&check=false&dubbo=2.6.2&interface=com.learnDubbo.demo.DemoService&methods=sayHello&pid=14208&side=consumer×tamp=1534389723130" 2) "1534389813690" 第一个为URL址,第二个为过期时间。 使用Zookeeper注册中心当使用Zookeeper注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方 <dubbo:registry address="zookeeper://localhost:2181"/> 对应的Zookeeper会产生如下数据 下图是官网给出的数据图 有些出入,但大致还是相同的,多了configurators和routers。 协议
参考资料:Dubbo官网 官网的介绍都很详细了,从官网中一般都能获取到你想到的信息。 有需要查看这篇博文的源码的可以点这里:Github地址 作者: 云枭zd 點擊查看更多內容
1人點贊
評論
評論
共同學習,寫下你的評論 評論加載中... 作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
舉報 0/150
提交
取消
|