【Dubbo】SpringBoot 整合 Dubbo 示例
因为 Dubbo 的依赖中引入了 Spring 相关 Jar 包,所以使用 Dubbo 默认是基于 Spring 的,在前面的文章我们介绍了如何 Dubbo 进行远程通信和服务治理,那么,本篇我们就来看看如何使用 SpringBoot 整合。
创建三个单独模块,分别表示 api,provider,consumer。
1.dubbo-api
/**
*要暴露的服务
*/
public interface ISayHelloService {
String sayHello();
}
2.dubbo-provider
1)引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 服务接口 -->
<dependency>
<groupId>com.xupt.yzh</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.2</version>
</dependency>
<!-- dubbo 自动装配相关内容-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<!-- 注册中心Zk客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
2)实现服务
// 这个@Service是dubbo的提供的,表示暴露服务Bean
// 也可以在@Service(loadbalance=)进行相关配置
@Service
public class SayHelloServiceImpl implements ISayHelloService {
@Override
public String sayHello() {
return "Hello Dubbo...";
}
}
3)配置服务内容
dubbo.scan.base-packages=com.xupt.yzh.dubboprovider
dubbo.application.name=dubbo-springboot
dubbo.registry.address=zookeeper://43.107.136.120:2181
几点注意:
- SpringBoot 默认采用dubbo协议与20880端口,所以 dubbo.protocol.name 与 dubbo.protocol.port 可以不显式配置
dubbo.application.name 必须配置,其作用在于多节点提供同一服务时起标识作用
- 在注册中心 zookeeper 中,服务节点的名称仍然是接口全类名,application.name 保存在临时节点的 url 中(通过&拼接)
- 如果在 com…ISayHelloService 下有多个节点(代表多种服务实现),那么 applicaiton.name 可以在调用方的@Reference(application=“ ‘)进行指定
- dubbo.scan.base-packages 必须配置了才能扫描
4)启动服务
启动服务后可以在 zookeeper 中看相关服务是否已经注册
3.dubbo-client
1)引入依赖
这里同 provider,但一般还会引入 web-starter,因为消费端一般会包含 Controller,提供 web 访问
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.xupt.yzh</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
2)远程调用服务
@RestController
public class DubboController {
// Dubbo提供的注解,标识根据服务名获取相应服务Bean
// 也可以在@Reference(loadbalance=)进行相关配置
@Reference
ISayHelloService sayHelloService;
@GetMapping("/sayHello")
public String sayHello() {
// 调用服务提供方法
return sayHelloService.sayHello();
}
}
3)配置服务内容
与provider相同
dubbo.registry.address=zookeeper://43.107.136.120:2181
dubbo.scan.base-packages=com.xupt.yzh.dubboclient
dubbo.application.name=dubbo-springboot-client
4.启动服务
启动后可以在web端进行访问
本篇相关代码我放到 GitHub 上了,有需要参考的同学点击这里跳转…
还没有评论,来说两句吧...