Dubbo 是基于Java的开源的RPC的分布式服务框架,目前是 Apache 项目。
推荐使用 ZooKeeper 做注册中心,当然也可以支持 Redis, Multicast 和Simple。
Dubbo 服务之间调用默认是同步阻塞的,也支持异步调用,基于 NIO 的非阻塞实现并行调用。
负载均衡支持 Random,RoundRibbon,LeastActive和 ConsistenHash四种策略。
并且 Dubbo 可以使用 Pinpoint 和 Apache Skywalking(Incubator) 实现分布式服务追踪。
这里简单记录下如何创建服务提供者,消费者,并注册到ZooKeeper 注册中心,然后实现服务调用。这里的ZooKeeper 之前已经搭建了,使用Dubbo将zk作为注册中心时,端口号需要和zoo.cfg里写的一致,默认为clientPort=2181。
1、创建聚合项目
pom.xm 文件配置如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.10.RELEASE</version> </parent> <groupId>com.demo</groupId> <artifactId>dubbo</artifactId> <version>1.0.0</version> <properties> <java.version>1.8</java.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.1.10.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.10.RELEASE</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.2.0</version> </dependency> </dependencies> </dependencyManagement>
2、新建 api 模块
pom文件配置:
<parent> <artifactId>dubbo</artifactId> <groupId>com.demo</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>api</artifactId>
新建一个服务接口:
public interface DubboService { public String test(String param); }
3、新建服务提供者模块
pom文件设置:
<parent> <groupId>com.demo</groupId> <artifactId>dubbo</artifactId> <version>1.0.0</version> </parent> <groupId>com.demo.dubbo</groupId> <artifactId>provider</artifactId> <version>1.0.0</version> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <artifactId>api</artifactId> <groupId>com.demo</groupId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> </dependency> </dependencies>
代码目录结构:
DubboServiceImpl:
package com.demo.dubbo.provider.service.impl; import com.demo.dubbo.service.DubboService; import org.apache.dubbo.config.annotation.Service; @Service public class DubboServiceImpl implements DubboService { @Override public String test(String param) { System.out.println("test"); return param + " disply"; } }
启动类:
@SpringBootApplication @EnableDubbo public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
application.yml配置文件:
dubbo: application: name: dubbo-provider registry: address: zookeeper://192.168.216.128:2181 protocol: port: 10080
4、新建服务消费者模块
pom文件配置:
<parent> <artifactId>dubbo</artifactId> <groupId>com.demo</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>consumer</artifactId> <dependencies> <dependency> <artifactId>api</artifactId> <groupId>com.demo</groupId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> </dependency> </dependencies>
代码目录结构:
启动类:
@SpringBootApplication @EnableDubbo public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
Controller:
@RestController public class DemoController { @Autowired private DemoService demoService; @RequestMapping("demo") public String demo() { return demoService.test(); } }
Service实现类:
package com.demo.dubbo.service.impl; import com.demo.dubbo.service.DemoService; import com.demo.dubbo.service.DubboService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service public class DemoServiceImpl implements DemoService { @Reference private DubboService dubboService; @Override public String test() { return dubboService.test("dubbo demo test"); } }
5、启动服务提供者和消费者两个服务
6、测试接口地址如果可以正常访问,说明服务调用成功。