以Springboot方式实现Dubbo服务的发布和消费
一. 创建SprintBoot项目
整个项目的目录结构为:
修改pom.xml文件
4.0.0
com.syc.dubbo
dubbo_demos
pom
1.0-SNAPSHOT
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-parent
2.1.1.RELEASE
org.springframework.boot
spring-boot-maven-plugin
二. 创建通用的接口模块
在项目中创建一个名为 dubbo_service_api
的模块,该项目只负责定义user相关接口.

2.1 修改POM文件
dubbo_demos
com.syc.dubbo
1.0-SNAPSHOT
4.0.0
dubbo_service_api
2.2 定义服务接口
package com.syc.dubbo.service.user;
/**
* 定义接口方法
*/
public interface UserService {
String sayHi();
}
三. 创建服务提供者模块
创建一个名为 dubbo_service_user_provider
的项目,该项目主要用于实现接口.
dubbo_demos
com.syc.dubbo
1.0-SNAPSHOT
4.0.0
dubbo_service_user_provider
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
com.alibaba.boot
dubbo-spring-boot-actuator
0.2.0
com.syc.dubbo
dubbo_service_api
1.0-SNAPSHOT
主要增加了以下依赖:
-
com.alibaba.boot:dubbo-spring-boot-starter:0.2.0
: Dubbo Starter,0.2.0 版本支持 Spring Boot 2.x,是一个长期维护的版本. 注: 0.1.0 版本已经不推荐使用了,是个短期维护的版本,如果你还在用旧版,请大家尽快升级. -
com.alibaba.boot:dubbo-spring-boot-actuator:0.2.0
: Dubbo 的服务状态检查 -
com.syc.dubbo:dubbo_service_api:1.0.0-SNAPSHOT
: 刚才创建的接口项目,如果无法依赖别忘记先mvn clean install
到本地仓库.
@Service
注解声明服务提供者
package com.syc.dubbo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.syc.dubbo.service.user.UserService;
/**
* 接口实现类
*/
@Service(version = "${user.service.version}")
public class UserServiceImpl implements UserService {
@Override
public String sayHi() {
return "Hello Dubbo";
}
}
3. 创建Application启动类
package com.syc.dubbo.service;
import com.alibaba.dubbo.container.Main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
// 启动 Provider 容器,注意这里的 Main 是 com.alibaba.dubbo.container 包下的.
Main.main(args);
}
}
4. 创建application.yml配置文件
# Spring boot application
spring:
application:
name: dubbo-service-user-provider
# UserService service version
user:
service:
version: 1.0.0
# Dubbo Config properties
dubbo:
#扫描@Service注解所在包:@com.alibaba.dubbo.config.annotation.Service
scan:
basePackages: com.syc.dubbo.service.impl
## ApplicationConfig Bean
application:
id: dubbo-service-user-provider
name: dubbo-service-user-provider
qos-port: 22222
qos-enable: true
## ProtocolConfig Bean
protocol:
id: dubbo
name: dubbo
#自定义的服务提供者端口号
port: 12345
status: server
## RegistryConfig Bean
registry:
id: zookeeper
address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
# Enables Dubbo All Endpoints
management:
endpoint:
dubbo:
enabled: true
dubbo-shutdown:
enabled: true
dubbo-configs:
enabled: true
dubbo-services:
enabled: true
dubbo-references:
enabled: true
dubbo-properties:
enabled: true
# Dubbo Health
health:
dubbo:
status:
## StatusChecker Name defaults (default : "memory", "load" )
defaults: memory
## StatusChecker Name extras (default : empty )
extras: load,threadpool
四. 创建服务消费者模块
创建一个名为 hello-dubbo-service-user-consumer
的项目,该项目用于消费接口(调用接口).
dubbo_demos
com.syc.dubbo
1.0-SNAPSHOT
4.0.0
dubbo_service_user_consumer
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
com.alibaba.boot
dubbo-spring-boot-actuator
0.2.0
com.syc.dubbo
dubbo_service_api
1.0-SNAPSHOT
2. 通过 @Reference
注入 UserService
package com.syc.dubbo.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.syc.dubbo.service.user.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Reference(version = "${user.service.version}")
private UserService userService;
@RequestMapping(value = "hi")
public String sayHi() {
return userService.sayHi();
}
}
3. 创建Application类
package com.syc.dubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
4. 创建application.yml配置文件
# Spring boot application
spring:
application:
name: dubbo-service-user-consumer
server:
port: 9090
# UserService service version
user:
service:
version: 1.0.0
# Dubbo Config properties
dubbo:
scan:
basePackages: com.syc.dubbo.controller
## ApplicationConfig Bean
application:
id: dubbo-service-user-consumer
name: dubbo-service-user-consumer
## RegistryConfig Bean
registry:
id: zookeeper
address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
# Dubbo Endpoint (default status is disable)
endpoints:
dubbo:
enabled: true
management:
server:
port: 9091
# Dubbo Health
health:
dubbo:
status:
## StatusChecker Name defaults (default : "memory", "load" )
defaults: memory
# Enables Dubbo All Endpoints
endpoint:
dubbo:
enabled: true
dubbo-shutdown:
enabled: true
dubbo-configs:
enabled: true
dubbo-services:
enabled: true
dubbo-references:
enabled: true
dubbo-properties:
enabled: true
endpoints:
web:
exposure:
include: "*"
五. 启动 Dubbo Admin 控制台
查看是否成功注册服务,效果图如下: