Dubbo是阿里开源的一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
项目名 | 描述 |
---|---|
dobbo-parent | 聚合工程,统一管理版本号 |
consumer | 服务消费者 |
common-api | 通用接口api |
dubbo-admin-master | dobbo控制台及注册中心和监控中心。(本文章只讲控制台) |
provider | 服务提供者 |
修改dobbo-parent的依赖,common-api依赖需要common-api模块通过mvn install发布到本地仓库再引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<properties> <java.version>1.8</java.version> <springboot-dobbo.version>0.2.0</springboot-dobbo.version> <common-api.version>1.0-SNAPSHOT</common-api.version> </properties> <!--统一管理版本号--> <dependencyManagement> <dependencies> <!-- 引入spring-boot-starter以及dubbo和curator的依赖 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${springboot-dobbo.version}</version> </dependency> <!--接口统一api--> <dependency> <groupId>com.ljm.boot.dobbo</groupId> <artifactId>common-api</artifactId> <version>${common-api.version}</version> </dependency> </dependencies> </dependencyManagement> |
common-api是一个定义通用的接口模块,
下面代码中定义了数据模型和服务提供者的接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class User implements Serializable { private String userName; private String age; private String address; //省略get,set方法 } /** * @Description 服务提供者接口 **/ public interface UserService { User getUserInfo(Integer userId); } |
版本在dobbo-parent中指定,所以无需指定版本号
1 2 3 4 5 6 7 8 9 10 11 12 |
<dependencies> <!--引入通用模块--> <dependency> <groupId>com.ljm.dobbo</groupId> <artifactId>common-api</artifactId> </dependency> <!-- 引入spring-boot-starter以及dubbo和curator的依赖 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> </dependencies> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
dubbo: application: name: user-service-provider registry: #注册中心协议 protocol: zookeeper #注册中心的地址 address: localhost:2181 protocol: name: dubbo port: 20881 monitor: #指定注册中心也是监控中心 protocol: registr |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@Service//注解不是 springframework包的,是dubbo包下的 @Component public class UserServiceImpl implements UserService { private ArrayList<User> list=new ArrayList<>(); /** * 制造假数据,实际环境应该重数据库获取 */ { User user=new User(); user.setUserName("张三"); user.setAge("18"); user.setAddress("北京大兴"); User user1=new User(); user1.setUserName("李四"); user1.setAge("19"); user1.setAddress("北京大兴"); User user2=new User(); user2.setUserName("王五"); user2.setAge("20"); user2.setAddress("北京大兴"); list.add(user); list.add(user1); list.add(user2); } @Override public User getUserInfo(Integer userId) { return list.get(userId); } } |
在启动类加上@EnableDubbo注解
因为注册中心和监控中心都用的zookeeper,所以先启动zookeeper
然后启动服务提供者,然道下图中的[Dubbo] Current Spring Boot Application is await… ,代表启动成功了.
1 2 3 4 5 6 7 8 9 10 11 12 |
<dependencies> <!--引入通用模块--> <dependency> <groupId>com.ljm.dobbo</groupId> <artifactId>common-api</artifactId> </dependency> <!-- 引入spring-boot-starter以及dubbo和curator的依赖 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency> </dependencies> |
1 2 3 4 5 6 7 8 9 10 11 |
server: port: 8009 dubbo: application: name: order-service-consumer registry: #注册中心地址 address: zookeeper://localhost:2181 monitor: protocol: registry |
通过@Reference注解引用远程服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public interface OrderService { User InitOrder(Integer userId); } @Service //注解不是 springframework包的,是dubbo包下的 @Component public class OrderServiceImpl implements OrderService { @Reference UserService userService; @Override public User InitOrder(Integer userId) { return userService.getUserInfo(userId); } } |
1 2 3 4 5 6 7 8 9 10 11 |
@RestController public class WebController { @Autowired OrderService orderService; @GetMapping("/initOrder/{userId}") public User initOrder(@PathVariable Integer userId){ return orderService.InitOrder(userId); } } |
在启动类加上@EnableDubbo注解
访问 http://127.0.0.1:8009/initOrder/1,看到下面结果代表着RPC调用成功了.
1 2 3 4 5 6 7 8 9 10 11 12 |
server.port=7001 spring.velocity.cache=false spring.velocity.charset=UTF-8 spring.velocity.layout-url=/templates/default.vm spring.messages.fallback-to-system-locale=false spring.messages.basename=i18n/message #root用户的密码 spring.root.password=root #guest用户的密码 spring.guest.password=root #配置注册中心地址 dubbo.registry.address=zookeeper://localhost:2181 |
访问 http://localhost:7001/
输入用户名 root,密码root登录系统就可以看到下面的页面了
创作不易,要是觉得我写的对你有点帮助的话,麻烦在gitee上帮我点下 Star
【SpringBoot框架篇】其它文章如下,后续会继续更新。
from:https://blog.csdn.net/ming19951224/article/details/106225928