提起dubbo,首先想到的是异步调用框架,同时提供了对springboot各种格式的支持,接下来是以spring boot的注解方式来简单描述spring boot整合dubbo的方式
官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
首先新建dubbo-test项目,其中有三个module,分别是dubbo-api,dubbo-provider以及dubbo-consumer;dubbo-api模块负责定义api接口,dubbo-provider模块负责对api接口进行逻辑实现以及服务注册,dubbo-consumer模块负责调用api中的接口,并通过相应注解来调用具体api的实现逻辑以及服务消费者的注册功能。
其中pom.xml文件(父级)中的主要依赖如下:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
dubbo-api模块负责定义api接口:
dubbo-provider模块需要引入dubbo-api模块,并且配置文件application.properties需要作如下配置:
dubbo-provider模块对api接口的实现:
package com.dubbo.provider.service.impl;
import com.dubbo.api.UserService;
import org.apache.dubbo.config.annotation.Service;
@Service(interfaceName = "userservice")
public class UserServiceImpl implements UserService {
@Override
public String getUserName(String username) {
return username;
}
}
注意的是这里@Service注解使用的是dubbo中的包,同时dubbo-provider模块的启动类需要添加@EnableDubbo注解来扫描服务实现类
dubbo-consumer模块也需要引入dubbo-api模块,同时配置文件application.properties需要做如下配置:
然后dubbo-consumer调用dubbo-api接口的逻辑如下:
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Reference(interfaceName = "username")
private UserService userService;
@GetMapping("/{userName}")
public String getUserName(@PathVariable(name = "userName") String userName) {
String name = userService.getUserName(userName);
return name;
}
}
其中@Reference注解相当于@Authwire注解,只是这里也是引入的dubbo中的包,同时dubbo-consumer模块的启动类也需要添加@EnableDubbo注解
测试:
至此,springboot整合dubbo,zookeeper为注册中心的样例就成功了