天天看點

dubbo springboot入門demo(二)

可以轉載,但請在文章開頭注明出去,謝謝!

上一篇介紹了一個能一次跑通的入門springboot dubbo demo,位址:https://blog.csdn.net/a704397849/article/details/91904085

本篇在上一篇的基礎上做了修改,公共api服務獨立作為一個maven項目被dubbo提供者和消費者引用。dubbo消費者增加了web使用。

注冊中心 zookeeper 3.4.14 和 管理平台 dubbo-admin 2.5x 的安裝使用 本文就不再介紹了,看上篇博文

開發工具

  • idea 版本:ULTIMATE 2018.1

公共api服務 (maven項目)

建立maven項目

dubbo springboot入門demo(二)

添加要注冊的服務

dubbo springboot入門demo(二)
  • User.java ,注意要序列化Serializable
package bean;

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    public int id;
    public String name;
    public String sex;

    public User(){}

    public User(int id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}
           
  • UserService.java
package service;

import bean.User;

public interface UserService {
    User getUser(Integer id);
}
           

maven打包生成jar包 , 這個jar包會被下面的provider 和 consumer 項目導入

dubbo springboot入門demo(二)

注:上面打包指令是在idea自帶的指令行終端執行的,也可以在系統終端執行: win + R 輸入cmd , 工作目錄跳轉到公共api服務項目根目錄 執行指令 mvn clean install

在項目根目錄下 執行 mvn clean install 後 會在項目根目錄下生成target目錄,生成的jar包就在target裡面

dubbo springboot入門demo(二)

mvn install 打包後會将jar包部署到maven倉庫中

dubbo springboot入門demo(二)
dubbo springboot入門demo(二)

provider

注: provider 和consumer 的運作都需要注冊中心zookeeper已經啟動了

建立 提供者 springboot項目

dubbo springboot入門demo(二)

provider 項目目錄結構,下面箭頭指向檔案需要添加或更改内容

dubbo springboot入門demo(二)

pom.xml 裡的 dependencies 内容替換掉

注:這裡有導入之前部署到本地maven倉庫的 公共api服務jar包

注:替換後, 右鍵pom.xml -> Maven - > Reimport

<dependencies>
        <!--公共api服務jar包-->
        <dependency>
            <groupId>com.dubbo</groupId>
            <artifactId>api</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
           

UserServiceImpl.java

package com.dubbo.provider.service;


import bean.User;
import com.alibaba.dubbo.config.annotation.Service;
import service.UserService;

import java.util.ArrayList;

/**
 * @author
 */
@Service(version = "1.0.0")
public class UserServiceImpl implements UserService {
    static ArrayList<User> userList = new ArrayList<>();
    static {
        userList.add(new User(1,"zhangsan","男"));
        userList.add(new User(2,"lisi","男"));
        userList.add(new User(3,"wangwu","女"));
        userList.add(new User(4,"zhaoliu","女"));
    }

    @Override
    public User getUser(Integer id) {
        for (User user:userList){
            if(id == user.getId()){
                return user;
            }
        }
        return null;
    }
}
           

application.properties

#應用名
spring.dubbo.application.name=provider
#注冊中心位址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#協定端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#掃描包
spring.dubbo.scan=com.dubbo.provider.service
           

啟動 provider項目

dubbo springboot入門demo(二)

dubbo-admin 啟動後,浏覽器輸入http://127.0.0.1:8080/dubbo-admin-2.5.10/ 檢視提供者資訊 (沒有安裝dubbo-admin,看文章頭介紹的上一篇博文)

dubbo springboot入門demo(二)

點選 172.16.1.112:20880 檢視詳細資訊

dubbo springboot入門demo(二)

consumer

建立 消費者 springboot項目

dubbo springboot入門demo(二)

consumer 項目目錄結構,下面箭頭指向檔案需要添加或更改内容

dubbo springboot入門demo(二)

pom.xml 裡的 dependencies 内容替換掉

注:這裡有導入之前部署到本地maven倉庫的 公共api服務jar包

注:替換後, 右鍵pom.xml -> Maven - > Reimport

<dependencies>
        <!--公共api服務jar包-->
        <dependency>
            <groupId>com.dubbo</groupId>
            <artifactId>api</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
            <!-- 避免依賴沖突,也就是避免阿裡巴巴的dubbo中自帶的spring依賴跟我們自己添加的依賴産生沖突 -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.jboss.netty</groupId>
                    <artifactId>netty</artifactId>
                </exclusion>
            </exclusions>
        </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>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- curator-framework -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
           

UserController.java

package com.dubbo.consumer.controller;

import bean.User;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import service.UserService;

@Controller
@RequestMapping(value = "/user")
public class UserController {
    @Reference(version = "1.0.0")
    public UserService userService;

    @RequestMapping(value = "/query",method = RequestMethod.GET)
    @ResponseBody
    public String getUser(@RequestParam(value="id",defaultValue="1",required=true) int id){
        User user = userService.getUser(id);
        if(user != null){
            System.out.println(user.toString());
            return user.toString();
        }
        System.out.println("user is not exist!");
        return "user is not exist!";
    }
}
           

ConsumerApplication.java , 注意 注解

package com.dubbo.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

@ImportResource(locations = {"classpath:dubbo-consumer.xml"})
@ComponentScan(basePackages = "com.dubbo.consumer")
@SpringBootApplication
public class ConsumerApplication {

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

}

           

application.properties

server.port=8082
#dubbo相關配置都放到 dubbo-consumer.xml 中, 原因是dubbo配置寫在這裡的話,dubbo的@refrence注解會和spring的注解産生沖突
#如果需要更深入需要了解spring啟動加載配置的順序
           

dubbo-consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 消費方應用名,用于計算依賴關系,不是比對條件,不要與提供方一樣 -->
    <dubbo:application name="consumer"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 需要使用到提供者服務的包路徑,多個包時用逗号隔開。注: 網上好多這裡寫錯了 -->
    <dubbo:annotation package="com.dubbo.consumer.controller"/>
</beans>
           

啟動 consumer項目

dubbo springboot入門demo(二)

dubbo-admin 啟動後,浏覽器輸入http://127.0.0.1:8080/dubbo-admin-2.5.10/ 檢視消費者資訊 (沒有安裝dubbo-admin,看文章頭介紹的上一篇博文)

dubbo springboot入門demo(二)

浏覽器輸入 127.0.0.1:8082/user/query

dubbo springboot入門demo(二)

浏覽器輸入 127.0.0.1:8082/user/query?id=3

dubbo springboot入門demo(二)

源碼

連結:https://pan.baidu.com/s/13i03s2lZnEyy_PQnEo9hbA

提取碼:lo46

注:首先 注冊中心zookeeper要啟動,生成公共api服務jar , 然後啟動provider,最後啟動consumer

dubbo springboot入門demo(二)

最後

如果哪裡寫的不對,請評論指出,謝謝!

繼續閱讀