Spring Boot 搭建dubbo框架

记录一下这周末搭建dubbo的过程。
公司一直使用的是dubbo框架,但是自己却一直停留在了使用的地位上,不知道如何搭建一个dubbo项目。
首先瞄下下dubbo的结构,多分一点可以分为3个模块;一个模块是common,这里面放的内容包括一些公用的DTO,或者dao层的一些。一个模块是provider,服务的提供者,这里面主要提供接口和逻辑层的处理内容。供给这个项目进行调用或者其他项目进行调用。第三个模块是consumer,服务的消费者,主要是处理前端传过来的url,与provider进行交互。
zookeeper的安装,是用于dubbo接口的注册。添加链接描述
最开始新建一个父模块,这里使用的是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

在这里插入图片描述