在java项目中,很多更加大型的项目其实已经采用springCloud 了。很多中小型项目其实我们很多项目并不需要这么多模块,将项目拆分为过多的模块,dubbo仍然有适合自己一些场景。在自己从头搭建一套项目的时候,有时候没有一套dubbo 模板导致刚刚搭建的时候就耗费挺多时间。这里将一套模板springboot + dubbo 模板贴出来,提高从头搭建项目的速率。
dubbo调用的整体的流程:
首先服务提供者 Provider 启动然后向注册中心注册自己所能提供的服务。
服务消费者 Consumer 启动向注册中心订阅自己所需的服务。然后注册中心将提供者元信息通知给 Consumer, 之后 Consumer 因为已经从注册中心获取提供者的地址,因此可以通过负载均衡选择一个 Provider 直接调用 。之后服务提供方元数据变更的话注册中心会把变更推送给服务消费者。
服务提供者和消费者都会在内存中记录着调用的次数和时间,然后定时的发送统计数据到监控中心。
二、common 的一些内容
1、在common模块构建dubbo模块间调用的接口(各个模块都会用到常量、返回类型这里主要演示dubo故值定义dubbo模块间调用的接口)
public interface ProviderService {
String getProviderData(String data);
}
三、provider构建内容
3.1 构建maven依赖(common的依赖、和dubbo所需要maven包)
11
2.7.1
org.springframework.boot
spring-boot-starter-web
com.yin
common
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.apache.dubbo
dubbo-dependencies-zookeeper
${dubbo.version}
pom
log4j
log4j
org.slfj
slf4j-log4j12
org.apache.dubbo
dubbo-spring-boot-starter
${dubbo.version}
org.apache.dubbo
dubbo
${dubbo.version}
3.2 构建provider 的application.properties 文件
server.port=9090
dubbo.application.name=dubbo-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://192.168.25.128:2181
dubbo.protocol.name=dubbo
dubbo.provider.timeout=30000
#这里需要注意,我们很多项目可能会引入多个dubbo调用者,group 需要把group 放到代码
dubbo.provider.group=dev
dubbo.protocol.port=20880
dubbo.config-center.timeout=50000
dubbo.registry.timeout=4000
#部分dubbo 版本注册默认,非动态注册(导致在zookeeper注册的永久节点)
dubbo.provider.dynamic=true
dubbo.service.version=1.0.0
3.3 构建provider 在启动内上添加扫描目录
@SpringBootApplication
@EnableDubbo(scanBasePackages = {"com.yin.dubboprovider.provider"})
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
3、4 启动类上添加注册版本号(其余信息都交由自动加载配置文件内容)
@Service(version = "${dubbo.service.version}")
public class ProviderServiceImpl implements ProviderService {
@Override
public String getProviderData(String data) {
return "get provider data is"+data;
}
}
四、consumer构建内容
4.1 构建maven依赖(common的依赖、和dubbo所需要maven包)
11
2.7.1
org.springframework.boot
spring-boot-starter-web
com.yin
common
1.0-SNAPSHOT
org.apache.dubbo
dubbo-dependencies-zookeeper
${dubbo.version}
pom
log4j
log4j
org.slfj
slf4j-log4j12
org.apache.dubbo
dubbo-spring-boot-starter
${dubbo.version}
org.apache.dubbo
dubbo
${dubbo.version}
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
4.2 构建provider 的application.properties 文件
server.port=9091
dubbo.application.name=dubbo-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://192.168.25.128:2181
dubbo.protocol.name=dubbo
dubbo.consumer.timeout=30000
#这里需要注意,我们很多项目可能会引入多个dubbo调用者,group 需要把group 放到代码
test.dubbo.consumer.group=dev
dubbo.protocol.port=20880
dubbo.config-center.timeout=50000
dubbo.registry.timeout=4000
dubbo.registry.id=moa-provider-api
dubbo.service.version=1.0.0
4、3 引入common里面接口进行调用
@RestController
@RequestMapping("/dubbo")
public class DubboController {
@Reference(version="${dubbo.service.version}",registry = "${dubbo.registry.id}",group = "${test.dubbo.consumer.group}")
private ProviderService service;
@RequestMapping("/getProviderData")
public String getProviderData(@RequestParam("data") String data) {
return service.getProviderData(data);
}
}