本文旨在快速搭建一个 纯 dubbo 微服务 应用。
# 创建一个项目
consumer
表示一个消费者。
provider
标识一个服务提供者。
provider-api
表示对外提供服务的 api.
我们现实的开发中,往往是一个服务既充当服务提供者角色,又充当服务消费者的角色。所以,每个服务都会有一个两个模块, 1.provider
,服务的实现逻辑模块, 2.provider-api
: 服务对外暴露的 api 模块。
# 引入依赖
在 父级 pom
中加入如下依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <properties> <dubbo.version>3.0.3</dubbo.version> </properties>
<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency>
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> </dependency> </dependencies>
|
可以看到,我们使用的 dubbo3.x
版本。在这个版本中,开发者将 dubbo
的依赖进行拆分,所以,我们引入了 dubbo
和 dubbo-dependencies-zookper
这两个依赖。
# 创建服务提供者
# 设置 api 依赖
在服务提供者的具体实现模块中 ( provider/pom.xml
),加入 api
模块依赖
1 2 3 4 5
| <dependency> <groupId>com.fxb</groupId> <artifactId>provider-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
|
# 定义 服务间的交互协议 (契约 / 规范)
其实就是定义服务间的 RPC
接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public interface IProviderService {
String sayHello(); }
|
# 实现服务提供者的业务逻辑
1 2 3 4 5 6 7 8 9 10 11 12
|
public class ProviderServiceImpl implements IProviderService { @Override public String sayHello() { return "hello, dubbo!"; } }
|
# 对外提供服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public class ProviderApplication {
private static final String zookeeperHost = "127.0.0.1";
public static void main(String[] args) throws InterruptedException { ServiceConfig<IProviderService> service = new ServiceConfig<>(); service.setApplication(new ApplicationConfig("first-dubbo-provider")); service.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181")); service.setInterface(IProviderService.class); service.setRef(new ProviderServiceImpl()); service.export();
System.out.println("dubbo service started"); new CountDownLatch(1).await(); } }
|
# 创建服务消费者
# 引入 api 依赖
在服务消费者的 pom
文件中 ( comsumer/pom.xml
),添加如下 maven
依赖
1 2 3 4 5
| <dependency> <groupId>com.fxb</groupId> <artifactId>provider-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
|
# 消费逻辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public class ConsumerApplication {
private static final String zookeeperHost = "127.0.0.1";
public static void main(String[] args) { ReferenceConfig<IProviderService> reference = new ReferenceConfig<>(); reference.setApplication(new ApplicationConfig("first-dubbo-consumer")); reference.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181")); reference.setInterface(IProviderService.class); IProviderService service = reference.get(); String message = service.sayHello(); System.out.println(message); } }
|
# 附录:搭建 zookeeper
注册中心
由于是单机演示,就简单的使用 单机zookeeper
就好了,
通过 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
下载 zookeeper
的 jar
包,解压后,使用 zkServer.sh(Mac OS)
或者 zkServer.cmd(Windows平台)
启动就可以了。默认端口使用的是 2181
.
# 最后
希望和你一起遇见更好的自己
扫码或搜索:方家小白
发送 290992
即可立即永久解锁本站全部文章