正经学徒,佛系记录,不搞事情

一、项目最终目录:

dubbo-provider:服务提供者

dubbo-consumer:服务消费者

dubbo-interface:消费者与提供者共同的接口层

由于dubbo的消费者与提供者都需要使用到共同的接口,因此本项目使用maven多模块构建项目,减少代码的重复

maven多模块构建项目可参考博客:https://blog.csdn.net/qq_31748587/article/details/84849520

二、创建一个springboot父工程:dubbo-parent

选中web起步依赖

删除无用的文件夹,只留pom.xml文件

修改打包方式为pom

<packaging>pom</packaging>

追加dubbo依赖和zookeeper客户端

<dependency>
	<groupId>com.alibaba.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>0.2.0</version>
</dependency>
<!-- zookeeper客户端 2.6以前的版本使用zkclient,dubbo 2.6+使用curator-->
<!--<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.10</version>
</dependency>-->
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-framework</artifactId>
	<version>2.12.0</version>
</dependency>

以及module:

<modules>
	<module>dubbo-interface</module>
	<module>dubbo-provider</module>
	<module>dubbo-consumer</module>
</modules>

dubbo-parent项目作为父项目,子项目将自动继承依赖,子项目的pom.xml就不需要在重复写依赖的jar

三、创建一个服务提供者:dubbo-provider

剩下的同创建父工程的流程,最后注意项目路径

配置application.yml(或者application.properties,两者作用相同,只是格式不同)

server:
  port: 7003
dubbo:
  application:
    name: dubbo-provider    #服务名称
  registry:
    protocol: zookeeper     #注册中心的协议
    address: 127.0.0.1:2181 #注册中心的地址
  protocol:
    name: dubbo             #通信协议
    port: 20880             #通信端口
  monitor:
    protocol: registry      #连接监控中心

四、创建一个服务消费者:dubbo-consumer

步骤同三

配置application.yml

server:
  port: 7004
dubbo:
  application:
    name: dubbo-consumer    #服务名称
  registry:
    protocol: zookeeper     #注册中心的协议
    address: 127.0.0.1:2181 #注册中心的地址
  monitor:
    protocol: registry      #连接监控中心

五、创建一个接口项目:dubbo-interface

此项目只需要创建普通的maven项目

六、配置项目之间的依赖

dubbo-providerdubbo-consumer两者都依赖于dubbo-interface

pom.xml添加

<!--依赖接口项目-->
<dependency>
	<groupId>com.mn</groupId>
	<artifactId>dubbo-interface</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

七、测试

  • 接口项目定义一个接口

public interface UserBS {
    UserDTO get();
}
  •  服务提供者提供实现接口

@Service
public class UserBSImpl implements UserBS{
    @Override
    public UserDTO get() {
        return new UserDTO("1","zhangsan",20);
    }
}

这里要注意的是,@Service的注解在这里是为了实现远程调用的,使用的是dubbo提供的注解

com.alibaba.dubbo.config.annotation.Service;

最后启动类添加注解@EnableDubbo

  • 服务消费者调用接口

消费者端是一个普通的springmvc项目

//控制类
@RestController
public class CallController {
    @Autowired
    private CallBS callBS;
    @GetMapping("get")
    public UserDTO get(){
        return callBS.getUser();
    }
}
//业务类
@Service
public class CallBSImpl implements CallBS {
    @Reference
    private UserBS userBS;

    @Override
    public UserDTO getUser() {
        return userBS.get();
    }
}

这里业务类的@Service注解是web注解

org.springframework.stereotype.Service;

@Reference注解作用同@Atuowire,注入接口项目提供的服务,与dubbo@Service结合使用

最终结果:

请求成功

项目地址:

https://pan.baidu.com/s/1UtxOXtAvMxlidi0N-MDqmA 提取码: 6313

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐