上一篇文章我记录了我如何搭建dubbo环境以及使用dubbo,不过那个demo是使用spring框架测试了下而已,我们可以使用springboot集成dubbo,这种基于注解的方式会更加容易让我们使用,于是,我本篇文章就记录了我如何将spring版本的demo改造成使用springboot来集成dubbo
common-api(公共接口包)
common-api
是定义的接口包,与上一节的没有什么变化。
├── common-api
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── martain
│ │ │ └── study
│ │ │ ├── IAdminService.java
│ │ │ ├── IUserService.java
│ │ │ └── vo
│ │ │ └── UserVO.java
UserVO.java
@Data
public class UserVO implements Serializable {
private String id;
private String userName;
private Integer age;
private String email;
}
IUserService.java
public interface IUserService {
UserVO getUserById(String userId);
}
boot-provider-user
boot-provider-user
是用户信息提供服务的模块。这是一个基本的spring-boot-starter
的项目
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── martain
│ │ └── study
│ │ ├── BootProviderUserApplication.java
│ │ └── service
│ │ └── UserService.java
│ └── resources
│ └── application.yml
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 添加接口包依赖 -->
<dependency>
<groupId>com.martain.study</groupId>
<artifactId>common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.4.1</version>
<type>pom</type>
</dependency>
</dependencies>
UserService.java
UserService 实现了 IUserService 的接口,其中需要加上dubbo包中的
@Service
注解
import org.apache.dubbo.config.annotation.Service;
@Service
@Component
public class UserService implements IUserService {
@Override
public UserVO getUserById(String userId) {
UserVO userVO = new UserVO();
userVO.setId(userId);
userVO.setUserName("user-"+userId);
userVO.setAge(18);
userVO.setEmail(userId+"@qq.com");
return userVO;
}
}
application.yml
dubbo的相关配置可以放置在这里。
dubbo:
application:
name: user-service-provider
registry: zookeeper://127.0.0.1:2181
metadata-report:
address: zookeeper://127.0.0.1:2181
BootProviderUserApplication.java
需要在启动类中添加
@EnableDubbo
注解来启动Dubbo
的支持
@EnableDubbo
@SpringBootApplication
public class BootProviderUserApplication {
public static void main(String[] args) {
SpringApplication.run(BootProviderUserApplication.class, args);
}
}
boot-consumer-admin
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── martain
│ │ │ └── study
│ │ │ ├── BootConsumerAdminApplication.java
│ │ │ └── controller
│ │ │ └── AdminController.java
│ │ └── resources
│ │ ├── application.yml
pom.xml
boot-consumer-admin
模块是一个简单的spring-boot-starter-web
项目
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加接口包依赖 -->
<dependency>
<groupId>com.martain.study</groupId>
<artifactId>common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.4.1</version>
<type>pom</type>
</dependency>
</dependencies>
AdminController.java
调用接口需要在注入接口时添加上
@Reference
注解。这里添加了一个测试接口用来调用远程的接口。
import org.apache.dubbo.config.annotation.Reference;
@RestController
public class AdminController {
@Reference
IUserService userService;
@GetMapping("findUserById/{userId}")
public UserVO findUserById(@PathVariable String userId){
return userService.getUserById(userId);
}
}
application.yml
server:
port: 8802
dubbo:
application:
name: admin-service-consumer
registry:
address: zookeeper://127.0.0.1:2181
BootConsumerAdminApplication.java
需要在启动类中添加
@EnableDubbo
注解来启动Dubbo
的支持
@EnableDubbo
@SpringBootApplication
public class BootConsumerAdminApplication {
public static void main(String[] args) {
SpringApplication.run(BootConsumerAdminApplication.class, args);
}
}
测试
➜ ~ curl http://localhost:8802/findUserById/123
{"id":"123","userName":"user-123","age":18,"email":"123@qq.com"}
网友评论