上一篇博客更新了Dubbo环境的安装,今天就开始来写一个简单的项目进行实战
首先创建一个空项目,然后在这个空项目中去构建我们的项目;
创建子模块,可以创建maven或者直接创建springboot项目,创建服务提供者和消费者的子模块,项目结构如下
项目创建好了后,给两个模块编写服务,服务内容啥的就自定义了
然后开始进行dubbo的配置,首先配置服务提供者
1、导入jar包
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<!-- 排除日志jar包 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
2、配置dubbo相关配置
server.port=8081
# 服务应用名称,消费者通过这个名称去找到这个服务
dubbo.application.name=provider-server
# 注册中心地址
dubbo.registry.address=zookeeper://192.168.0.109:2181
# 需要被注册的服务
dubbo.scan.base-packages=com.provider.service
# 注册超时时间
dubbo.registry.timeout=20000
## 注意,zookeeper的默认超时时间是2秒,如果两秒内连上了就没问题,项目会启动
## 如果两秒内没连上,项目会启动失败
## 所以建议将超时时间设置大一点,或者去更改zookeeper的配置文件:tickTime 参数
3、扫描服务添加注解
/**
* 注意这个服务类的注解,新版使用的是DubboService
* 之前的版本使用的是Service,引入包的时候选择dubbo下面的,否则会扫描失败
* 或者使用万能注解Component
**/
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class ProviderService implements IProviderService {
@Override
public String demo(String str) {
String result = "传了一个参数:" + str;
System.out.println(result);
return result;
}
}
项目启动后,可以再dubbo的后台控制界面看到我们注册的服务
现在服务提供者正常运行,接下来就开始配置服务消费者
1、导入jar包
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.6.2</version>
<!-- 排除日志jar包 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
2、配置dubbo相关配置
server.port=8082
# 消费者名称
dubbo.application.name=consumer-service
# 注册中心地址
dubbo.registry.address=zookeeper://192.168.0.109:2181
# 连接超时时间
dubbo.registry.timeout=20000
## 注意,zookeeper的默认超时时间是2秒,如果两秒内连上了就没问题,项目会启动
## 如果两秒内没连上,项目会启动失败
## 所以建议将超时时间设置大一点,或者去更改zookeeper的配置文件:tickTime 参数
3、编写服务调用远程
去调用远程服务用两种,一种是在服务消费者项目中建立与服务提供者同包同名的接口类,必须保证一模一样,否者在调用时会失败,
另一种是在pom文件中引入服务提供者的坐标,在实际开发中是使用的引入坐标的方式
<!-- 服务提供者的坐标 -->
<dependency>
<groupId>com.provider</groupId>
<artifactId>provider-server</artifactId>
<version>1.0</version>
</dependency>
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
@Service //注意,这里在本地使用,直接加入到本地spring容器
public class ConsumerService implements IConsumerService {
@DubboReference //引用远程服务
private IProviderService providerService;
@Override
public void consumerDemo() {
System.out.println(providerService.demo("测试"));
}
}
然后通过单元测试进行测试