Dubbo项目入门

Dubbo项目入门

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/> 配置注册中心

可以使用Multicast、Redis、Zookeeper、Simple这四个作为注册中心。

<dubbo:registry address="multicast://224.5.6.7:1234"/> 配置协议

默认为dubbo

<dubbo:protocol port="20880"/> 定义bean

然后定义bean,以及将bean作为服务暴露出去

<bean/> <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 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项目入门

搭建一个注解的Dubbo项目

服务提供者和服务消费者共用的接口还是使用service-api,新建下面两个项目

service-consumer-annotation 基于注解的服务消费者

service-provider-annotation 基于注解的服务提供者

基于注解的服务提供者

新建一个springboot项目
同样需要提供一个DemoService的实现类,且在类上增加@Service注解

注:是com.alibaba.dubbo.config.annotation.Service
不是org.springframework.stereotype.Service
别导错了

接下来需要增加dubbo的配置类

@Configuration public class DubboConfiguration { /** * 对应xml配置:<dubbo:application/> * @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,用于测试结果,代码如下

@RestController public class DemoController { @Reference private DemoService demoService; @GetMapping("sayHello") public String sayHello(){ return demoService.sayHello("Dubbo"); } }

@Reference注解表示引用服务类似于xml配置

<dubbo:reference interface="com.learnDubbo.demo.DemoService"/>

在项目启动类上同样需要注解@DubboComponentScan指定dubbo扫描路径

测试

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfxgy.html