上一篇博客更新了Dubbo环境的安装,今天就开始来写一个简单的项目进行实战

  

  首先创建一个空项目,然后在这个空项目中去构建我们的项目;

  创建子模块,可以创建maven或者直接创建springboot项目,创建服务提供者和消费者的子模块,项目结构如下

dubbo治理下的微服务架构 dubbo实现微服务_dubbo治理下的微服务架构


  项目创建好了后,给两个模块编写服务,服务内容啥的就自定义了

  

  然后开始进行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的后台控制界面看到我们注册的服务

dubbo治理下的微服务架构 dubbo实现微服务_ide_02


  现在服务提供者正常运行,接下来就开始配置服务消费者

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("测试"));
    }
}

  然后通过单元测试进行测试

dubbo治理下的微服务架构 dubbo实现微服务_apache_03