前言

前两天在和粉丝聊天的时候,粉丝跟我说之前在面试的时候被问到SpringBoot这一块的常识被问的有点懵,和我问了不少这方面的货色。预先我想了想不如把这些货色分享进去吧,让更多的人看到,这样不论是对本人常识的一个晋升还是对面试的筹备都有益处。好了,满满的干货都在上面了!

1.创立maven我的项目父工程(不应用idea的spring Initializr)

不勾选任何模板,间接应用默认我的项目模板

删除src文件夹,创立这个我的项目的目标是为了作为父工程,无需src文件夹,只保留pom文件即可

编辑pom文件

设置父工程打包形式为pom,用于依赖治理

    <packaging>pom</packaging>

增加必要依赖

<dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>            <version>${spring-boot.version}</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <version>${spring-boot.version}</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <version>${spring-boot.version}</version>        </dependency>        <!-- dubbo依赖 apache版 -->        <dependency>            <groupId>org.apache.dubbo</groupId>            <artifactId>dubbo-spring-boot-starter</artifactId>            <version>2.7.7</version>        </dependency>        <!-- dubbo所需其余依赖 应用alibaba的dubbo则不须要 -->        <dependency>            <groupId>org.apache.curator</groupId>            <artifactId>curator-framework</artifactId>            <version>4.0.1</version>        </dependency>        <!-- dubbo所需其余依赖 应用alibaba的dubbo则不须要 -->        <dependency>            <groupId>org.apache.curator</groupId>            <artifactId>curator-recipes</artifactId>            <version>2.8.0</version>        </dependency>        <!-- zookeeper依赖 -->        <dependency>            <groupId>com.101tec</groupId>            <artifactId>zkclient</artifactId>            <version>0.7</version>        </dependency>    </dependencies></dependencyManagement>

2. 创立生产者

同第一步雷同,创立子模块,名为provider

删除src文件夹,该模块仍作为父工程应用

批改pom文件,继承父工程,并设置打包形式为pom

    <parent>        <groupId>online.hupeng.dubbo</groupId>        <artifactId>base</artifactId>        <version>1.0</version>    </parent>    <artifactId>provider</artifactId>    <packaging>pom</packaging>

创立子工程provider-api,

批改pom文件,继承父工程provider
这个工程为生产者和束缚者束缚api标准,生产者和消费者都需依赖此模块分割彼此
此模块中只写api和实体类,不写实现形式

<parent>    <groupId>online.hupeng.dubbo</groupId>    <artifactId>provider</artifactId>    <version>1.0</version></parent><artifactId>provider-api</artifactId><version>1.0</version><!-- maven默认打包形式为jar包,此处可不必显示指定 --><packaging>jar</packaging>

编写代码

实体类user

package online.hupeng.dubbo.provider.domain;import java.io.Serializable;/*当实体类作为RPC办法的返回值时,必须实现Serializable接口,dubbo的实现原理就是消费者近程调用生产者办法,生产者返回序列化后的返回值,消费者通过网络获取到序列化后的数据再反序列化*//*此处不实现Serializable接口,近程调用办法时会报错,并提醒实体类需继承此接口*/public class User implements Serializable {    private String account;    private String password;    public String getAccount() {        return account;    }    public void setAccount(String account) {    this.account = account;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

UserService接口

    package online.hupeng.dubbo.provider.service;    import online.hupeng.dubbo.provider.domain.User;    public interface UserService {        User getUserInstance();    }

执行mvn install命令将jar包打入本地仓库
结束
在provider下创立子工程provider-service模块(此模块为真正的生产者)

编辑pom文件继承父工程

<parent>    <groupId>online.hupeng.dubbo</groupId>    <artifactId>provider</artifactId>    <version>1.0</version></parent><artifactId>provider-service</artifactId><version>1.0</version><name>provider-service</name><properties>    <java.version>1.8</java.version></properties>

增加必须依赖

<dependencies>    <!-- 此处依赖api模块标准接口 -->    <dependency>        <groupId>online.hupeng.dubbo</groupId>        <artifactId>provider-api</artifactId>        <version>1.0</version>    </dependency>    <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>        <exclusions>            <exclusion>                <groupId>org.junit.vintage</groupId>                <artifactId>junit-vintage-engine</artifactId>            </exclusion>        </exclusions>    </dependency>    <dependency>        <groupId>org.apache.dubbo</groupId>        <artifactId>dubbo-spring-boot-starter</artifactId>    </dependency>    <dependency>        <groupId>org.apache.curator</groupId>        <artifactId>curator-framework</artifactId>    </dependency>    <dependency>        <groupId>org.apache.curator</groupId>        <artifactId>curator-recipes</artifactId>    </dependency>    <dependency>        <groupId>com.101tec</groupId>        <artifactId>zkclient</artifactId>    </dependency></dependencies>

UserService的实现类UserServiceImpl

package online.hupeng.dubbo.provider.service.impl;import online.hupeng.dubbo.provider.domain.User;import online.hupeng.dubbo.provider.service.UserService;import org.apache.dubbo.config.annotation.DubboService;    /*    dubbo注解,指定接口版本号和超时工夫,调用方需正确填写版本信息    */    @DubboService(version = "1.0", timeout = 300)    public class UserServiceImpl implements UserService {    @Override    public User getUserInstance() {        User user = new User();        user.setAccount("admin");    user.setPassword("admin");    return user;    }}

application.yml配置

dubbo:    application:        # 指定该服务名称         name: provider    registry:        # 通信协议        protocol: zookeeper        # 注册核心地址        address: 127.0.0.1        # 注册核心端口号        port: 2181        # 也能够不配置protocol和port,间接配置为zookeeper://127.0.0.1:2181    protocol:    name: dubbo    # 服务裸露端口    port: 8081# 包扫描(此处为扫描dubbo的注解,和SpringBoot无关)    scan:    base-packages: online.hupeng.dubbo

为启动类增加dubbo注解@EnableDubbo

package online.hupeng.dubbo.provider;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo@SpringBootApplicationpublic class ProviderServiceApplication {    public static void main(String[] args) {    SpringApplication.run(ProviderServiceApplication.class, args);    }}

3. 创立消费者

在根我的项目下创立consumer模块
编辑pom文件继承父我的项目

<parent>    <artifactId>base</artifactId>    <groupId>online.hupeng.dubbo</groupId>    <version>1.0</version></parent><artifactId>consumer</artifactId><version>1.0</version>

增加必须依赖

<dependencies>    <!-- 引入provider-api依赖用以近程调用 -->    <dependency>        <groupId>online.hupeng.dubbo</groupId>        <artifactId>provider-api</artifactId>        <version>1.0</version>        <scope>compile</scope>    </dependency>        <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>        <exclusions>            <exclusion>                <groupId>org.junit.vintage</groupId>                <artifactId>junit-vintage-engine</artifactId>            </exclusion>        </exclusions>    </dependency>    <dependency>        <groupId>org.apache.dubbo</groupId>        <artifactId>dubbo-spring-boot-starter</artifactId>    </dependency>    <dependency>        <groupId>org.apache.curator</groupId>        <artifactId>curator-framework</artifactId>    </dependency>    <dependency>        <groupId>org.apache.curator</groupId>        <artifactId>curator-recipes</artifactId>    </dependency>    <dependency>        <groupId>com.101tec</groupId>        <artifactId>zkclient</artifactId>    </dependency></dependencies>

编辑controller层代码近程调用

package online.hupeng.dubbo.consumer.controller;import online.hupeng.dubbo.provider.domain.User;import online.hupeng.dubbo.provider.service.UserService;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class ConsumerController {    /*    近程调用注解,需正确对应生产者的版本号,此处不须要@autowird注入对象    */    @DubboReference(version = "1.0")    private UserService userService;    @ResponseBody    @GetMapping("/test")    public User getUser() {        return userService.getUserInstance();    }}

配置application.yml文件

dubbo:    application:        name: provider    registry:        protocol: zookeeper        address: 127.0.0.1        port: 2181    protocol:        name: dubbo        # 服务裸露端口        port: 8081    # 包扫描    scan:        base-packages: online.hupeng.dubbo
#### 增加SpringBoot启动类

package online.hupeng.dubbo.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ConsumerApplication {

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

}

## 4. 测试按程序启动zookeeper、provider-service、consumer拜访http://localhost/test![](https://upload-images.jianshu.io/upload_images/23140115-86109ded3f85528b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)胜利!!!## 最初