内容简介:官方提供的demo太多,内容也很详细,资料也多,导致不易快速上手,以下是我根据官方文档整理出来的快速上手步骤首先rpc调用都需要有注册中心,zookeeper, nacos,redis等都可以拿来作为注册中心 这里为了演示方便我们还是拿经典的zookeeper做演示完整代码已上传github:
官方提供的demo太多,内容也很详细,资料也多,导致不易快速上手,以下是我根据官方文档整理出来的快速上手步骤
首先rpc调用都需要有注册中心,zookeeper, nacos,redis等都可以拿来作为注册中心 这里为了演示方便我们还是拿经典的zookeeper做演示
完整代码已上传github: github.com/neatlife/my… 下载后启动zookeeper即可运行
获取一个可用的zookeeper实例
可以使用 docker 启动zookeeper,比如 docker-compose-single.yml
version: '3.1'
services:
zoo:
image: 31z4/zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
复制代码
然后执行 docker-compose -f docker-compose-single.yml up -d 命令启动zookeeper实例
执行 lsof -i :2181 查看效果
可以看到zookeeper已经在2181端口进行监听了
规划模块
一个rpc服务至少需要以下4个模块组成
| 模块名 | 作用 |
|---|---|
| my-api | 给my-provider和my-consumer 提供统一的接口和数据传输dto |
| my-provider | 服务提供方 |
| my-consumer | 服务消费方 |
| my-dubbo-spring-boot | 项目外层模块,组织以上3个模块 非必须,可以提供一些子模块可以复用的依赖,属性等 |
在idea中创建项目my-dubbo-spring-boot和三个子模块,都使用maven来管理依赖
my-provider和my-consumer都要依赖dubbo库
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
复制代码
my-api提供通用依赖,所以不需要任何依赖 因为是spring boot项目,所以spring boot依赖肯定是有的,完整依赖可以去github查看源代码
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
复制代码
编写消费者和服务提供者的接口
在模块my-api中创建服务接口DemoService,代码如下
package com.demo.consumer;
/**
* Demo Service interface
*
* @since 2.7.0
*/
public interface DemoService {
String sayHello(String name);
}
复制代码
这个就是服务提供者需要提供的服务
然后在my-consumer和my-provider模块中都依赖这个my-api模块,代码如下:
<dependency>
<groupId>com.demo</groupId>
<artifactId>my-api</artifactId>
<version>2.7.1</version>
</dependency>
复制代码
编写服务提供者
在my-provider里实现DemoService,核心代码如下
@Service(version = "${demo.service.version}")
public class DefaultDemoService implements DemoService {
/**
* The default value of ${dubbo.application.name} is ${spring.application.name}
*/
@Value("${dubbo.application.name}")
private String serviceName;
@Override
public String sayHello(String name) {
return String.format("[%s] : Hello, %s", serviceName, name);
}
}
复制代码
然后在项目配置文件声明服务提供者的名字等配置,核心配置如下
# Spring boot application
spring.application.name=my-provider
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.demo.provider
# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
## dubbo.application.name=${spring.application.name}
# Dubbo Protocol
dubbo.protocol.name=dubbo
## Random port
dubbo.protocol.port=-1
## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.file = ${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache
## DemoService version
demo.service.version=1.0.0
复制代码
然后启动服务者,查看控制台输出效果
编写服务消费者
在my-consumer里调用DemoService,核心代码如下
@EnableAutoConfiguration
public class MyConsumerApplication {
private final Logger log = LoggerFactory.getLogger(getClass());
@Reference(version = "${demo.service.version}")
private DemoService demoService;
public static void main(String[] args) {
SpringApplication.run(MyConsumerApplication.class).close();
}
@Bean
public ApplicationRunner runner() {
return args -> log.error(demoService.sayHello("World"));
}
}
复制代码
为了看到明显的输出效果,这里使用了log.error
启动项目,查看调用效果
可以看到输出里带了服务提供者加上的字符串 Hello
一些注意的点
my-api 模块作为dubbo消费者和服务提供者的通用依赖,可以提供通用的服务接口,服务输入,输出dto等
spring boot dubbo官方有提供一个内置的zookeeper,参考: EmbeddedZooKeeper.java ,作者认为一般不会用这种方式启动zookeeper,所以使用docker启动了一个zookeeper,可以自行选择
可以加作者微信一起研究dubbo的使用和原理
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 快速上手前端框架layui
- Gin框架系列01:极速上手
- 小白教程|一小时上手最流行的前端框架vue
- 工具 | 一款上手简单,功能强大的 Python 爬虫框架
- PyTorch官方教程书限时免费!500页内容带你上手最流行框架
- Kbone 框架快速上手:把 Web 端代码直接移植到小程序的工具是否好用?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ActionScript 3.0 Cookbook
Joey Lott、Darron Schall、Keith Peters / Adobe Dev Library / 2006-10-11 / GBP 28.50
Well before Ajax and Microsoft's Windows Presentation Foundation hit the scene, Macromedia offered the first method for building web pages with the responsiveness and functionality of desktop programs......一起来看看 《ActionScript 3.0 Cookbook》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
UNIX 时间戳转换
UNIX 时间戳转换