案例 : 分作三个模块 1 dubbo-common, 2 dubbo-provider, 4 dubbo-consumer
1 dubbo-common模块, maven搭建的一个普通的java项目
1.1 pom文件
<!--
持有 dubbo 依赖,
目的是为了方便管理, 之后provider和consumer只需要持有这个模块的依赖, 就不需要各自添加dubbo依赖
-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
1.2 持有公共Service接口
package com;
public interface DosomeService {
Object dosome(String str);
}
2 dubbo-provider 模块, springboot项目
2.1 pom 文件
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2.2 yml文件配置
server:
port: 8081 #Tomcat端口, 和provider模块当然不能重复
2.3 在 resources 目录下创建 dubbo-consumer.properties 配置文件, (命名随意)
# 和项目名称相同
dubbo.application.name=dubbo-Serv
# 查阅官方文档可知, registry.address 属性是必须的, 即使不使用注册中心, 也得有这个属性, 随便给一个;
dubbo.registry.address=N/A
# 设置 registry.register=false, 消除 registry.address 的作用;
dubbo.registry.register=false
# 固定的
dubbo.protocol.name=dubbo
# 暴露服务的端口
dubbo.protocol.port=20880
2.4 创建接口的实现类
package com.example.dubboserv.service.impl;
import com.DosomeService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@DubboService (version = "1.0.0", timeout = 3000)
public class DosomeServiceImpl implements DosomeService {
@Override
public Object dosome(String str) {
System.out.println("服务被调用");
List<String> x = new ArrayList<>();
x.add("a");
x.add("b");
x.add("c");
return x;
}
}
2.5 创建配置类
// 表明这是一个配置类
@Configuration
// 开启dubbo, 作为服务端, 在括号内指定服务的包
@EnableDubbo(scanBasePackages = "com.example.dubboserv.service.impl")
// 扫描dubbo配置文件
@PropertySource("classpath:/dubbo-provider.properties")
public class DubboServConfig {
// 啥也不用干
}
2.6 启动类不需要做改变
@SpringBootApplication
public class DubboServApplication {
public static void main(String[] args) {
SpringApplication.run(DubboServApplication.class, args);
}
}
3 dubbo-consumer 模块, springboot项目
3.1 pom 文件
<dependency>
<groupId>org.example</groupId>
<artifactId>dubbo-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3.2 yml文件配置
server:
port: 8081 #Tomcat端口, 和provider模块当然不能重复
3.3 在 resources 目录下创建 dubbo-provider.properties 配置文件, (命名随意)
# 和项目名称相同
dubbo.application.name=dubbo-consu
# 固定的
dubbo.protocol.name=dubbo
# 暴露服务的端口
dubbo.protocol.port=20880
# 启动时不检查是否有服务, 默认是true
dubbo.consumer.check=false
3.4 创建配置类
// 表明这是一个配置类
@Configuration
// 开启dubbo
@EnableDubbo
// 扫描dubbo配置文件
@PropertySource("classpath:/dubbo-consumer.properties")
public class DubboServConfig {
// 啥也不用干
}
3.5 启动类不需要做改变
@EnableScheduling
@SpringBootApplication
public class DubboConsuApplication {
public static void main(String[] args) {
SpringApplication.run(DubboServApplication.class, args);
}
}
3.6 通过定时任务来测试服务的调用
@Component
public class Test {
// 通过 url 属性指定 ip 和 port, 直接访问服务提供者
@DubboReference(
id="dosomeService",
interfaceName = "com.DosomeService",
version = "1.0.0",
url="dubbo://10.41.25.2:20880")
private DosomeService dosomeService;
@Scheduled(cron = "0/5 * * * * ?")
public void m() {
Object ans = dosomeService.dosome("发起调用");
System.out.println(ans);
}
}