记录一下这周末搭建dubbo的过程。
公司一直使用的是dubbo框架,但是自己却一直停留在了使用的地位上,不知道如何搭建一个dubbo项目。
首先瞄了下dubbo的结构,多分一点可以分为3个模块;一个模块是common,这里面放的内容包括一些公用的DTO,或者dao层的一些。一个模块是provider,服务的提供者,这里面主要提供接口和逻辑层的处理内容。供给这个项目进行调用或者其他项目进行调用。第三个模块是consumer,服务的消费者,主要是处理前端传过来的url,消费provider提供的服务。
zookeeper的安装,是用于dubbo接口的注册。(https://blog.csdn.net/qq_35529931/article/details/83045372)
最开始新建一个父模块,这里使用的是spring boot的创建模式,不进行描述。然后将其中的src删掉。接下来描述下第一部分common的模块创建过程:
第一步:在该项目下创建一个Module,之后选择的方式依旧是spring boot即可,里面的与第一步相同,不描述了。

由于本次只写个DTO,所以没有配置dao的相关配置。同时,也用不到启动的主函数,也删除了。

如果在之后的启动项目中,找不到DTO啥的,可以在pom.xml添加一下这段话(坑一):
<configuration>
<classifier>exec</classifier>
</configuration>

第二部分:接下来就是开始创建provider模块了:
第一步,与上个模块基本一致。进行命名创建一个spring boot模块;
第二部,添加pom.xml依赖,需要用到dubbo和zookeeper,以及上个common的依赖
<!-- dubbo依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zookeeper依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>com.order</groupId>
<artifactId>order-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

第三步,写接口和接口的实现。这里需要注意的是注解@Service使用的是dubbo注解。

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service(version = "1.0.0")
到这里,这个接口就完成了,可以对本项目以及其他项目提供服务了。第四步,同理,我们需要把它的dubbo服务发布出去,需要在.properties中进行配置,
spring.application.name=spring-boot-dubbo-order-provider
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://IP:端口
spring.dubbo.protocol.port=20880
server.port=8081

需要注意的是这个端口号和消费者的端口号不能相同。
第五步:在启动类里面配置dubbo的启动项配置:
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
@EnableDubboConfiguration

第三部分:接下来创建的是消费者consumer模块
第一步,创建生产的模式依旧一样,不描述。
第二步,引入pom.xml的依赖,因为是Web服务,所以需要多引入一个容器(或者创建的时候添加Web,springboot会自带tomcat),还要多引入一个provider的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<!--<exclusion>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-logging</artifactId>-->
<!--</exclusion>-->
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- dubbo依赖-->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>com.order</groupId>
<artifactId>order-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.order</groupId>
<artifactId>order-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

第四步:在controller层中使用@Reference注解进行调用接口

import com.alibaba.dubbo.config.annotation.Reference;
@RestController
public class DubboConsumerController {
@Reference(version = "1.0.0")
private OrderService orderService;
@RequestMapping("/")
public UserInfo index(){
return orderService.getUserById(Long.valueOf(1));
}
}
第五步:在.properties中进行配置zookeeper和端口号
server.port=8080
spring.application.name=spring-boot-consumer-provider
spring.dubbo.registry=zookeeper://IP:端口

第六步,在启动类里面添加dubbo的启动项配置:
@EnableDubboConfiguration

启动项目后,在网页进行测试,成功返回了字符串。

最后,在dubbo-admin进行查看服务提供者和服务消费者,会发现两者都正常。
消息提供者provider:

服务消费者:consumer

最后,分享下代码。源码传到了github上;
https://github.com/virtuousOne/dubbo |