# spring-boot-starter-dubbo
**Repository Path**: jhxx/spring-boot-starter-dubbo
## Basic Information
- **Project Name**: spring-boot-starter-dubbo
- **Description**: dubbo springboot支持
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 95
- **Created**: 2017-04-12
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#spring-boot-start-dubbo
* Dubbo是阿里开发的一套分布式通讯框架,Spring-boot是业界比较火的微服务框架,两者可以进行结合实现分布式微服务
* 对于内部远程Rpc调用,可以借用Dubbo能力,达到服务治理的目的
##例子
git: https://git.oschina.net/wuyu15255872976/dubbo-demo-parent.git
##增加feign protocol支持。
> 该协议主要是为了支持老项目可以消费springcloud提供的接口,并可以利用dubbo的服务发现,构建出一个springboot rest集群,
> dubbo与springboot结合时,不需要dubbo再次导出rest服务。而是由springboot提供rest服务dubbo端只负责注册,构建服务目录。
添加以下maven
```
org.apache.httpcomponents
httpclient
org.springframework.cloud
spring-cloud-starter-feign
io.github.openfeign
feign-httpclient
```
###feign示例
```
@Bean
//服务端,多协议发布服务
public ServiceBean userServiceServiceBean(@Autowired UserService userService) {
ServiceBean serviceBean = new ServiceBean();
serviceBean.setInterface(UserService.class);
serviceBean.setRef(userService);
serviceBean.setProtocols(Arrays.asList(new ProtocolConfig("dubbo"), new ProtocolConfig("feign", port)));
return serviceBean;
}
@Bean
//消费端,此种方式可以避免使用@Reference注解,保持与spring注解一致
public ReferenceBean userService() {
ReferenceBean bean = new ReferenceBean();
bean.setInterface(UserService.class);
return bean;
}
@FeignClient(path = "/user")
public interface UserService {
@RequestMapping(value = "{id}", method = RequestMethod.GET)
User findOne(@PathVariable(value = "id") Integer id);
@RequestMapping(value = "{id}", method = RequestMethod.DELETE)
void delete(@PathVariable(value = "id") Integer id);
@RequestMapping(value = "/", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
void save(@RequestBody User user);
@RequestMapping(value = "/", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
void update(@RequestBody User user);
@RequestMapping(value = "/findAll", method = RequestMethod.GET)
List findAll();
}
```
##如何发布Dubbo服务
在Spring Boot项目的pom.xml中添加以下依赖:
```
com.alibaba
spring-boot-starter-dubbo
1.4.5.SNAPSHOT
org.springframework.boot
spring-boot-starter-web
1.4.5.RELEASE
```
在application.properties添加Dubbo的版本信息和客户端超时信息,如下:
```
#dubbo produce
spring.dubbo.application.name=comment-provider
spring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=monkey:2181,127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.vcg.comment.service
spring.dubbo.protocol.host=发布的hostname
在Spring Application的application.properties中添加spring.dubbo.scan即可支持Dubbo服务发布,其中scan表示要扫描的package目录
```
spring boot启动
```
@SpringBootApplication
@EnableDubboAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
编写你的Dubbo服务,只需要添加要发布的服务实现上添加 @Service ,如下:
```
@Service(version = "1.0.0")
public class CommentServiceImpl implements CommentService {
@Override
public String test() {
return "hello";
}
}
如果你不喜欢Dubbo的@Service注解,而是喜欢原生的Spring @Service注解,可以采用以下方式对外发布服务
@Configurable
public class BeanConfiguration {
MonitorConfig monitorConfig;
@Autowire
public void setMonitorConfig(MonitorConfig monitorConfig){
this.monitorConfig=monitorConfig;
}
@Bean
public ServiceBean commentServiceServiceBean(CommentService commentService) {
ServiceBean serviceBean = new ServiceBean<>();
serviceBean.setInterface(CommentService.class);
//开启监控
serviceBean.setMonitor(monitorConfig);
serviceBean.setRef(commentService);
return serviceBean;
}
}
```
在application.properties添加Dubbo的版本信息和客户端超时信息,如下:
#dubbo consumer
```
spring.dubbo.application.name=comment-consumer
spring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=monkey:2181
spring.dubbo.scan=com.vcg
在Spring Application的application.properties中添加spring.dubbo.scan即可支持Dubbo服务发布,其中scan表示要扫描的package目录
```
引用Dubbo服务,只需要添加要发布的服务实现上添加 @Reference ,如下:
```
@Component
public class UserController {
@Reference(version = "1.0.0")
private CommentService commentService;
}
```
如果你不喜欢@Reference注入服务,而是用@Autowired可以采用以下方式.
```
@Configurable
public class BeanConfiguration {
MonitorConfig monitorConfig;
@Autowire
public void setMonitorConfig(MonitorConfig monitorConfig){
this.monitorConfig=monitorConfig;
}
@Bean
public ReferenceBean commentService(){
ReferenceBean commentServiceBean=new ReferenceBean<>();
commentServiceBean.setInterface(CommentService.class);
commentServiceBean.setMonitor(monitorConfig);
return commentServiceBean;
}
}
```
引用Dubbo服务,引用以上服务:
```
@Component
public class UserController {
@Autowired
private CommentService commentService;
}
```