从零开始学Dubbo-基础篇-远程调用使用

本篇主要讲述了dubbo的远程调用如何使用。将会通过一个案例来讲解。

一共分为四步:

  • 1.创建maven工程,定义jar包版本
  • 2.创建api模块,规范接口
  • 3.创建provider模块,引入api模块,注册到注册中心供消费者使用,作为服务的提供者
  • 4.创建consumer模块,作为服务的消费者,引入注册中心,调用服务提供者

1.创建maven工程

首先创建基本的maven工程
image.png
然后配置配置groupId以及artifactId
image.png
然后在pom.xml引入依赖.dependencyManagement作用是子模块会引用父模块的版本号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
xml复制代码<properties>
<dubbo.version>2.7.1</dubbo.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rpc-dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-netty4</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-hessian2</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>

这边dubbo我选择了2.7.1的版本,因为使用2.7.5+jdk11我这边出现了配置无法解析的错误
image.png

2.创建api模块

这里主要就是创建接口,做好规定

image.png

1
2
3
4
5
6
7
8
typescript复制代码/**
* @author Davon ding
* @Description: 接口协定
* @date 2021/4/10 1:40 下午
*/
public interface HelloDubbo {
String sayHello(String name);
}

3.创建provider模块

首先pom.xml引入所需依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
xml复制代码<dependencies>
<dependency>
<groupId>com.study</groupId>
<artifactId>dubbo-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-rpc-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-remoting-netty4</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-hessian2</artifactId>
</dependency>
</dependencies>

1.实现api接口

1
2
3
4
5
6
7
8
typescript复制代码//这个service是dubbo的service
@Service
public class HellowDubboImpl implements HelloDubbo {
@Override
public String sayHello(String name) {
return "provider ack:"+name;
}
}

2.设置配置类,以及启动类

这边直接写在一起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
java复制代码public class DubboPureMain {

public static void main(String[] args) throws IOException {
//加载配置类
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ProviderConfiguration.class);
//启动容器
context.start();
//保证程序一直运行
System.in.read();
}

//标记是配置类
@Configuration
//扫包 类似于componetscan
@EnableDubbo(scanBasePackages = "com.study.service")
//读取配置文件
@PropertySource("classpath:/dubbo-provider.properties")
static class ProviderConfiguration{
@Bean
public RegistryConfig registryConfig(){
RegistryConfig registryConfig=new RegistryConfig();
//设置zk地址 注册中心地址
registryConfig.setAddress("zookeeper://10.0.9.173:2181");
return registryConfig;
}
}
}

接下来看一下配置文件信息

1
2
3
4
5
6
ini复制代码#服务名称
dubbo.application.name=dubbo-service-provider
#使用的协议
dubbo.protocol.name=dubbo
#端口号
dubbo.protocol.port=20881

4.创建consumer模块

1.实现对api接口的调用

1
2
3
4
5
6
7
8
9
10
11
typescript复制代码@Component
public class ConsumerCompent {
//dubbo的注解,加载对象时会生成代理存入
@Reference
private HelloDubbo helloDubbo;

public String sayHello(String name){
return helloDubbo.sayHello(name);
}

}

2.设置配置类、启动类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
java复制代码public class AnnotationConsumerMain {

public static void main(String[] args) throws IOException {
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ConsumerConfiguation.class);
context.start();
//获取对象
final ConsumerCompent bean = context.getBean(ConsumerCompent.class);
//测试
while (true){
System.in.read();
String hello=bean.sayHello("test");
System.out.println("consumer post:"+hello);
}
}

@Configuration
@PropertySource("classpath:/dubbo-consumer.properties")
//spring扫描
@ComponentScan(basePackages = "com.study.bean")
@EnableDubbo
static class ConsumerConfiguation{

}
}

看一下消费者的配置文件

1
2
3
4
ini复制代码//服务名
dubbo.application.name=dubbo-service-consumer
//dubbo注册中心地址
dubbo.registry.address=zookeeper://10.0.9.173:2181

测试

上面四步就是简易的远程调用实例,接下来测试一下效果,要先启动provider再启动consumer。
输入123回车,则会调用4次,结果如下:

image.png

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%