本篇主要讲述了dubbo的远程调用如何使用。将会通过一个案例来讲解。
一共分为四步:
- 1.创建maven工程,定义jar包版本
- 2.创建api模块,规范接口
- 3.创建provider模块,引入api模块,注册到注册中心供消费者使用,作为服务的提供者
- 4.创建consumer模块,作为服务的消费者,引入注册中心,调用服务提供者
1.创建maven工程
首先创建基本的maven工程 然后配置配置groupId以及artifactId 然后在pom.xml引入依赖.dependencyManagement作用是子模块会引用父模块的版本号。
<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我这边出现了配置无法解析的错误
2.创建api模块
这里主要就是创建接口,做好规定
/**
* @author Davon ding
* @Description: 接口协定
* @date 2021/4/10 1:40 下午
*/
public interface HelloDubbo {
String sayHello(String name);
}
3.创建provider模块
首先pom.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接口
//这个service是dubbo的service
@Service
public class HellowDubboImpl implements HelloDubbo {
@Override
public String sayHello(String name) {
return "provider ack:"+name;
}
}
2.设置配置类,以及启动类
这边直接写在一起
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;
}
}
}
接下来看一下配置文件信息
#服务名称
dubbo.application.name=dubbo-service-provider
#使用的协议
dubbo.protocol.name=dubbo
#端口号
dubbo.protocol.port=20881
4.创建consumer模块
1.实现对api接口的调用
@Component
public class ConsumerCompent {
//dubbo的注解,加载对象时会生成代理存入
@Reference
private HelloDubbo helloDubbo;
public String sayHello(String name){
return helloDubbo.sayHello(name);
}
}
2.设置配置类、启动类
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{
}
}
看一下消费者的配置文件
//服务名
dubbo.application.name=dubbo-service-consumer
//dubbo注册中心地址
dubbo.registry.address=zookeeper://10.0.9.173:2181
测试
上面四步就是简易的远程调用实例,接下来测试一下效果,要先启动provider再启动consumer。 输入123回车,则会调用4次,结果如下: