ApacheDubbo笔记
文章目录
一、Dubbo所需依赖
(1)普通Maven项目(服务提供者和消费者相同)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.zzcfirst</groupId>
<artifactId>user-provider</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>cn.zzcfirst</groupId>
<artifactId>user-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.5</version>
</dependency>
</dependencies>
</project>
(2)i.SpringBoot集成服务提供者
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.zzcfirst</groupId>
<artifactId>springboot-provider</artifactId>
<version>0.0.1</version>
<name>springboot-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.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>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>cn.zzcfirst</groupId>
<artifactId>user-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(2)ii.SpringBoot集成服务消费者
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.zzcfirst</groupId>
<artifactId>springboot-consumer</artifactId>
<version>0.0.1</version>
<name>springboot-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</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>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>cn.zzcfirst</groupId>
<artifactId>user-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(3)ii.SpringCloud集成依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.zzcfirst</groupId>
<artifactId>consumer</artifactId>
<version>0.0.1</version>
<name>consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring.cloud-version>Hoxton.SR9</spring.cloud-version>
<alibaba.cloud-version>2.2.1.RELEASE</alibaba.cloud-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>cn.zzcfirst</groupId>
<artifactId>user-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、Dubbo简介
Dubbo是一款高性能、轻量级的开源java RPC分布式服务框架。
核心功能:
面向接口的远程过程调用
集群容错和负载均衡
服务自动注册与发现
特点:
使用分层的架构模式,使得各个层次之间实现最大限度的解耦。
将服务抽象为服务提供者(Provider)与服务消费者(Consumer)两个角色。

三、ApacheDubbo的使用 – 配置文件方式
1、创建通用接口user-api并发布到maven仓库
2、创建服务提供者模块实现接口
3、配置服务提供者模块
4、创建服务消费者模块
5、配置服务消费者模块
6、启动消费者和提供者
创建接口
public interface IUserService {
String getNameById(String uid);
}
创建服务提供者模块实现接口
public class UserServiceImpl implements IUserService {
@Override
public String getNameById(String uid) {
System.out.println("receive request data :" + uid);
return "Mic";
}
}
配置服务提供者
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="user-provider"/>
<dubbo:registry address="N/A"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="cn.zzcfirst.IUserService" ref="userService"/>
<bean id="userService"
class="cn.zzcfirst.service.UserServiceImpl"/>
</beans>
配置服务消费者
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="order-service"/>
<dubbo:registry address="N/A"/>
<dubbo:reference id="userService"
interface="cn.zzcfirst.IUserService" url="dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService"/>
</beans>
启动服务
public class StartMain {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("classpath:/META-INF/spring/user-provider.xml");
context.start();
System.in.read();
}
}
四、ApacheDubbo的使用 – SpringBoot集成
1、创建服务提供者实现通用接口
2、配置服务提供者
3、创建服务调用者
4、配置服务调用者
5、依赖注入(不同于web方式)
6、启动服务即可
创建服务提供者以及实现接口代码省略
配置服务提供者
spring:
application:
name: spring-boot-dubbo-provider
dubbo:
application:
name: springboot-provider
protocol:
name: dubbo
port: 20880
#若不注册服务中心则值为N/A 注意Dubbo服务的注册协议名称对应服务器名称
registry:
address: zookeeper://127.0.0.1:2181
创建服务调用者代码省略
启动类上加注解**@DubboComponentScan**
配置服务调用者
spring:
application:
name: spring-boot-consumer
server:
port: 8888
dubbo:
application:
name: springboot-consumer
#若不注册服务中心则值为N/A
registry:
address: zookeeper://127.0.0.1:2181
依赖注入
@SpringBootApplication
public class SpringbootCosumerApplication {
//若进行服务注册 则此处不需要填写协议地址和服务名称
@DubboReference(url = "dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService")
private IUserService userService;
public static void main(String[] args) {
SpringApplication.run(SpringbootCosumerApplication.class, args);
}
@Bean
public ApplicationRunner runner(){
return args->System.out.println(userService.getNameById("1"));
}
}
五、ApacheDubbo的使用 – SpringCloud集成
1、创建服务提供者实现通用接口
2、配置服务提供者
3、创建服务调用者
4、配置服务调用者
5、依赖注入(不同于web方式)
6、启动服务即可
创建服务提供者实现通用接口
@DubboService
public class TestService implements IUserService {
@Override
public String getNameById(String s) {
return "hello " + s;
}
}
配置服务提供者
dubbo:
protocol:
port: 20880
name: dubbo
registry:
address: zookeeper://127.0.0.1:2181
application:
id: provider
spring:
cloud:
zookeeper:
discovery:
register: true
connect-string: 127.0.0.1:2181
application:
name: provider
server:
port: 8888
创建服务调用者
@RestController
public class TestController {
@DubboReference
private IUserService userService;
@GetMapping("/{uid}")
public String test(@PathVariable("uid") String uid){
return userService.getNameById(uid);
}
}
配置服务调用者
dubbo:
application:
id: consumer
protocol:
port: 20880
name: dubbo
registry:
address: zookeeper://127.0.0.1:2181
cloud:
subscribed-services: provider
spring:
application:
name: consumer
cloud:
zookeeper:
discovery:
register: false
connect-string: 127.0.0.1:2181
server:
port: 8881
依赖注入(不同于web方式)
见服务调用者代码
启动服务即可
六、配置文件方式配置项说明
| 配置项 | 作用 |
|---|---|
| <dubbo:application name=“user-provider”/> | 应用名称 |
| <dubbo:registry address=“N/A”/> | 注册中心地址N/A表示不注册 |
| <dubbo:protocol name=“dubbo” port=“20880”/> | 协议类型以及协议对应端口 |
| <dubbo:service interface="cn.zzcfirst.IUserService"ref=“userService”/> | 暴露的服务接口以及参照的服务实现 |
| < bean id=“userService” class=“cn.zzcfirst.service.UserServiceImpl”/> | 服务实现类 |
| <dubbo:reference id="userService"interface=“cn.zzcfirst.IUserService” url=“dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService”/> | id配置服务id对应发布者暴露的服务interface为公共接口全类名url为协议+ip+端口+service中暴露的interface值(也就是公共接口名) |
七、SpringBoot集成方式配置项以及注解说明
| 配置项 | 作用 |
|---|---|
| dubbo.application.name: springboot-provider | 服务的名称 |
| dubbo.protocol.name: dubbo | 协议的名称 |
| dubbo.protocol.port: 20880 | 协议的端口 |
| dubbo.registry.address: N/A | 注册服务器的地址(N/A表示不注册) |
| 注解 | 作用 |
| @DubboComponentScan | 扫描包中的Dubbo组件 |
| @DubboService | 标注为一个Dubbo服务 |
| @DubboReference(url = “dubbo://127.0.0.1:20880/cn.zzcfirst.IUserService”) | Dubbo依赖注入注解 |
八、SpringCloud集成方式配置项以及注解说明
| 配置项 | 作用 |
|---|---|
| dubbo.application.id: provider | 服务的id |
| dubbo.protocol.name: dubbo | 协议的名称 |
| dubbo.protocol.port: 20880 | 协议的端口 |
| spring: cloud: zookeeper: discovery: register: true | 将服务注册到zookeeper |
| spring: cloud: zookeeper: connect-string: 127.0.0.1:2181 | 注册地址为127.0.0.1:2181 |
| dubbo: cloud: subscribed-services: provider | 订阅的服务名称 默认为*全部 |
| 注解 | 作用 |
| @DubboComponentScan | 扫描包中的Dubbo组件 |
| @DubboService | 标注为一个Dubbo服务 |
| @DubboReference | Dubbo依赖注入注解 |
Apache Dubbo 是一款高性能的 Java RPC 框架,它提供了服务提供者、消费者的角色抽象,支持分层架构,具有集群容错、负载均衡等功能。这篇笔记详细介绍了 Dubbo 的依赖配置,包括普通 Maven 项目、SpringBoot 和 SpringCloud 的集成,以及各集成方式的配置项和注解说明。
1027

被折叠的 条评论
为什么被折叠?



