快速搭建基于注解的Dubbo项目

栏目: 后端 · 发布时间: 5年前

内容简介:首先安装注册中心,这里我们选用zookeeper,直接去Apache官网下载,下载地址安装后进入bin目录,启动zkServer.cmd即可,如果是在linux上,就启动zkServer.sh即可,默认端口为2181首先,在空白目录下,打开控制台,输入(需要已安装maven):

首先安装注册中心,这里我们选用zookeeper,直接去Apache官网下载,下载地址 Apache ZooKeeper™ Releases

安装后进入bin目录,启动zkServer.cmd即可,如果是在 linux 上,就启动zkServer.sh即可,默认端口为2181

搭建管理控制台(可选)

首先,在空白目录下,打开控制台,输入(需要已安装maven):

git clone https://github.com/apache/incubator-dubbo-admin.git
复制代码

接下来进入incubator-dubbo-admin,在目录下执行(需要已安装node.js):

mvn clean package
复制代码

因为采用了前后端分离的项目构建方式,如果这里没有安装node.js,会在npm下载依赖的时候报错

如果刚才打包失败,报错如下异常,或其他类似的与SLF4J有关的异常:

快速搭建基于注解的Dubbo项目

这是由于日志版本太低或日志缺失导致的bug,进入incubator-dubbo-admin\dubbo-admin-server\pom.xml中,在<dependencies></dependencies>标签下添加以下依赖

<dependency>
	   <groupId>ch.qos.logback</groupId>
	   <artifactId>logback-classic</artifactId>
	   <version>1.2.3</version>
	</dependency>
	<dependency>
	   <groupId>ch.qos.logback</groupId>
	   <artifactId>logback-core</artifactId>
	   <version>RELEASE</version>
	</dependency>
复制代码

然后返回上一级目录重新进行打包,打包中如果报其他异常可以无视,只要最后提示BUILD SUCCESS即可,打包完成后进入incubator-dubbo-admin\dubbo-admin-distribution\target目录下,执行以下命令运行jar包:

java -jar dubbo-admin-0.1.jar
复制代码

接着访问 http://localhost:8080 ,出现类似下面界面就说明我们的管理控制台搭建成功:

快速搭建基于注解的Dubbo项目

搭建Dubbo项目

接下来我们就要搭建一个简易的Dubbo项目,首先我们创建一个空目录(注意,不要新建项目),名字任意,这里我就用创建一个dubbo-annotation-demo文件夹,然后用idea打开(eclipse或sts操作类似)

创建接口

接下来我们创建公用接口模块,右键项目,创建module:

快速搭建基于注解的Dubbo项目

我们选择创建Maven项目,名字任意,但是最好按照规范,这里:

快速搭建基于注解的Dubbo项目
快速搭建基于注解的Dubbo项目

然后打开pom.xml,设置打包方式和编码格式:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.akira</groupId>
    <artifactId>dubbo-service-user-api</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

</project>
复制代码

然后,进入源码目录src\main\java,创建包com.akira.dubbo.service.user.api,在包下创建我们的接口类,这里我们就采用dubbo官方的示例:

public interface UserService {

    String sayHi();
}
复制代码

创建Provider

按照刚才的步骤创建Module,不过这里我们选择创建spring-boot项目,名字任意,而且不用添加任何依赖,我们一会儿手动添加:

快速搭建基于注解的Dubbo项目
快速搭建基于注解的Dubbo项目

然后我们打开pom.xml,添加以下依赖:

<!-- spring-boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <!-- 系统健康监控 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
		
		<!-- dubbo in spring-boot -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <!-- 我们自己的接口 -->
        <dependency>
            <groupId>com.akira</groupId>
            <artifactId>dubbo-service-user-api</artifactId>
            <version>${project.version}</version>
        </dependency>
复制代码

如果我们自己的接口依赖报红,就进入dubbo-service-user-api目录下(接口模块目录),打开cmd,执行mvn clean install即可

然后我们进入resources目录下,修改配置文件:

spring:
  application:
    name: dubbo-service-user-provider

# 因为8080端口已经被管理台占用,所以要换一个端口
server:
  port: 8180 
   
# 自定义配置,接口的版本号
user:
  service:
    version: 1.0.0
  
dubbo:
  scan:
    basePackages: com.akira.dubbo.service.user.provider.api
  application:
    id: dubbo-service-user-provider
    name: dubbo-service-user-provider
    qos-port: 22222
    qos-enable: true
  protocol:
    id: dubbo
    name: dubbo
    port: 12345
    status: server
  # 与注册中心保持一致
  registry:
    id: zookeeper
    address: zookeeper://127.0.0.1:2181
复制代码

接着我们进入源码目录下,创建api.impl包,在包下创建UserServiceImpl我们接口的实现类:

快速搭建基于注解的Dubbo项目
@Service(version = "${user.service.version}")
public class UserServiceImpl implements UserService {

    @Override
    public String sayHi() {
        return "Hello Dubbo";
    }
}
复制代码

注意,这个@Service注解是com.alibaba.dubbo.config.annotation.Service包下的,千万别导错了

最后,我们在DubboServiceUserProviderApplication中的main方法最后添加一行代码,用于启动Provider,要注意两点:

  • 一定要先启动注册中心,这里我们使用zookeeper,就一定要先启动zookeeper,再启动我们的provider项目
  • 这个Main对象是com.alibaba.dubbo.container.Main包下的类,不要导错了
@SpringBootApplication
public class DubboServiceUserProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboServiceUserProviderApplication.class, args);

        Main.main(args);
    }
}
复制代码

然后启动该应用模块,我们的服务提供者就完成了

创建consumer

和创建provider的步骤大致相同,这里我就不再赘述了,模块名字我这里使用dubbo-serivce-user-consumer,需要注意的是,在pom.xml文件中的plugin中,需要配置入口类,如下:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.akira.dubbo.service.user.consumer.DubboServiceUserConsumerApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
复制代码

同时,因为我们服务消费者是一个web应用,所以需要把spring-boot-start的依赖改为spring-boot-starter-web,同时要添加dubbo和api的依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- dubbo -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        
         <!-- self-api -->
        <dependency>
            <groupId>com.akira</groupId>
            <artifactId>dubbo-service-user-api</artifactId>
            <version>${project.version}</version>
        </dependency>
复制代码

接着修改配置文件,这里我采用的yml配置方式,配置内容和provider基本一致,需要注意两点:

  • 因为默认端口8080和管理中心端口冲突,所以需要修改端口
  • 需要去掉dubbo.protocol.status的配置,否则会认为该模块为服务提供者

具体配置如下:

spring:
  application:
    name: dubbo-service-user-consumer

server:
  port: 8077

user:
  service:
    version: 1.0.0

dubbo:
  scan:
    basePackages: com.akira.dubbo.service.user.consumer.controller
  application:
    id: dubbo-service-user-consumer
    name: dubbo-service-user-consumer
  protocol:
    id: dubbo
    name: dubbo
    port: 12345
  registry:
    id: zookeeper
    address: zookeeper://127.0.0.1:2181
复制代码

然后回到源码目录下,创建controller包,添加UserController类:

@RestController
public class UserController {

    @Reference(version = "${user.service.version}")
    private UserService userService;

    @GetMapping("hi")
    public String sayHi() {
        return userService.sayHi();
    }
}
复制代码

注意,这里@Reference是dubbo包下的注解,可以把它当成@Autowired注解来使用 最后启动该应用模块,就完成了服务消费者的构建,注意启动顺序是:

  1. zookeeper注册中心
  2. dubbo-admin管理控制台
  3. provider服务提供者
  4. consumer服务消费者

这样,我们的样例就完成了


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

打破界限

打破界限

电通跨媒体开发项目组 / 苏友友 / 中信出版社 / 2011-10 / 35.00元

《打破界限:电通式跨媒体沟通策略》是日本电通跨媒体沟通开发项目组对“跨媒体”的思考方式、策划工具、成功案例和评估手段等诸多内容进行深入研究得到的丰硕成果,深刻剖析了此营销模式的本质。 目前,为客户提供整合式营销解决方案的电通模式在世界各国都获得了很高评价。而跨媒体沟通正是电通实现这种模式最先进的工具之一。一起来看看 《打破界限》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具