本文旨在快速搭建一个 纯dubbo微服务 应用。
创建一个项目

consumer表示一个消费者。provider标识一个服务提供者。provider-api表示对外提供服务的api.
我们现实的开发中,往往是一个服务既充当服务提供者角色,又充当服务消费者的角色。所以,每个服务都会有一个两个模块,1.provider,服务的实现逻辑模块, 2.provider-api:服务对外暴露的api模块。
引入依赖
在 父级pom中加入如下依赖:
<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模块依赖
<dependency>
<groupId>com.fxb</groupId>
<artifactId>provider-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
定义 服务间的交互协议(契约/规范)
其实就是定义服务间的RPC接口。
/**
* 定义rpc的交互规范
*
* @author fangjiaxiaobai
* @date 2021-10-13 16:16
*/
public interface IProviderService {
/**
* say hello
*
* @return "hello dubbo"
*/
String sayHello();
}
实现服务提供者的业务逻辑
/**
* 实现服务的具体逻辑
*
* @author fangjiaxiaobai
* @date 2021-10-13 16:00
*/
public class ProviderServiceImpl implements IProviderService {
@Override
public String sayHello() {
return "hello, dubbo!";
}
}
对外提供服务
/**
* 服务启动
*
* @author fangjiaxiaobai
* @date 2021-10-13 16:01
*/
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依赖
<dependency>
<groupId>com.fxb</groupId>
<artifactId>provider-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
消费逻辑
/**
* 服务消费者
*
* @author fangjiaxiaobai
* @date 2021-10-13 16:20
*/
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.
最后
希望和你一起遇见更好的自己
