IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Dubbo简单Demo搭建 -> 正文阅读

[Java知识库]Dubbo简单Demo搭建

Dubbo简单Demo搭建

? 上一篇博客简单介绍了一下Dubbo的一些背景,这一篇博客就开始上手一个简单Demo,只有成功的跑起来,才有继续学下去的动力,一直看资料多乏味啊。

搭建注册中心

? Dubbo是使用注册中心来注册服务和发现服务的。上一篇博客里面也有一个Dubbo结构图。挺形象的。Dubbo支持很多种注册中心,Nacos、Zookeeper、Multicast、Redis、Simple。官方推荐Zookeeper注册中心,我们这里也是搭建一个Zookeeper集群。其他的注册中心大家可以去官网了解一下。

? Zookeeper的搭建因为之前学习过Docker,我这里直接就看了官方的文档,参考写了一个Compose文件,直接启动,下载镜像就可以了,很简单,也不需要很复杂的安装很多东西。这里贴上Compose文件,大家直接运行docker-compose -f dubbo-compose.yml up -d即可。

version: '3.1'

services:
  zoo1:
    container_name: zoo1
    image: zookeeper
    restart: always
    hostname: zoo1
    ports:
      - 2181:2181
    networks:
      - dubbo-net
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    container_name: zoo2
    image: zookeeper
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    networks:
      - dubbo-net
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    container_name: zoo3
    image: zookeeper
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    networks:
      - dubbo-net
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
  
  dubbo-admin:
    image: apache/dubbo-admin
    container_name: dubbo-admin
    ports:
      - 8080:8080
    networks:
      - dubbo-net
    environment:
      - admin.registry.address=zookeeper://zoo1:2181?backup=zoo2:2181,zoo3:2181
      - admin.config-center=zookeeper://zoo1:2181?backup=zoo2:2181,zoo3:2181
      - admin.metadata-report.address=zookeeper://zoo1:2181?backup=zoo2:2181,zoo3:2181
    depends_on:
      - zoo1
      - zoo2
      - zoo3
networks:
  dubbo-net:
    name: dubbo-net
    driver: bridge

? 关于Zookeeper的一些知识后面有机会再学习吧,这一块感觉还挺有意思的。

搭建监控中心

? 可以看到上面不止启动了一个容器,还有一个dubbo-admin的镜像,这个镜像就是dubbo的管理平台,但是它的界面是这个样子。

image-20210824224955559

? 和我最开始接触老版的管理界面不一样,老版的页面看GitHub上已经不再更新了,界面如下:

image-20210824225323418

? 这个监控平台也很好弄,从官网下载老版代码,修改对应的配置,然后直接java -jar dubbo-admin-0.0.1-SNAPSHOT.jar即可。地址如下:老版监控平台代码仓库

? 需要注意,配置文件修改Zookeeper地址时,修改为如下形式。

dubbo.registry.address=zookeeper://127.0.0.1:2181?backup=127.0.0.1:2181,127.0.0.1:2181

项目结构

? 先说一下项目的构成。是一个maven项目,里面有三个子模块,分别是API、生产者和消费者。结构图如下:

image-20210824230320055

  • API模块:如果生产者需要被多个消费者调用,接口在这些项目中粘贴也不太好,这里将接口定义在API模块中,这样,其他项目直接倒入依赖就可以了,你还可以将这个API打包到你的本地maven仓库。
  • consumer模块:就是消费者模块,和前端交互的模块。
  • provider模块:生产者模块,业务的主要实现的地方,例如数据库的查询就是在这个模块。

? 父pom文件如下:因为用到的东西比较少,所以依赖不是很多。

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/>
    </parent>
    <groupId>com.psq</groupId>
    <artifactId>springboot-exercise</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>springboot-exercise</name>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-service-provider</module>
        <module>dubbo-service-consumer</module>
        <module>dubbo-service-api</module>
    </modules>

    <dependencies>
        <!--  个人写代码方便,实际开发不推荐      -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--   SpringBoot依赖  -->
        <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>


    </dependencies>

</project>

生产者代码编写

? 生产者先说pom依赖,如果你导入的是阿里的Dubbo依赖,不需要再导入其他依赖了,但是如果你导入的是apache的Dubbo依赖,你需要再根据你使用的注册中心再导入一个依赖,我这里需要再导入一个zookeeper的依赖,pom文件如下:

<?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">
    <parent>
        <artifactId>springboot-exercise</artifactId>
        <groupId>com.psq</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo-service-provider</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--  API依赖      -->
        <dependency>
            <groupId>com.psq</groupId>
            <artifactId>dubbo-service-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
            <!-- 导入这个依赖就不需要再导入其他依赖了 -->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.boot</groupId>-->
<!--            <artifactId>dubbo-spring-boot-starter</artifactId>-->
<!--            <version>0.2.0</version>-->
<!--        </dependency>-->
        <!--  下面是导入apacheDubbo的方式     -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <type>pom</type>
            <version>2.7.5</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

</project>

? 生产者还需要再配置一些Dubbo的配置,配置文件代码如下:

spring:
  application:
    name: dubbo-service-provider
dubbo:
  application:
    name: dubbo-service-provider
  registry:
    address: zookeeper://127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
    protocol: dubbo
    port: 20880
  scan:
    base-packages: com.psq.dubbboserviceprovider.server

? 需要注意你的applicationname不能和消费者一样,最好这个服务唯一,多个相同生产者相同。zookeeper需要注意集群的配置形式,其他的配置也可以看看官方的文档。如下:Dubbo官方配置文档

? 这里只是简单demo,就打印一个hello world吧,一个接口,只是返回一个字符串。API的接口代码如下:

package com.psq.dubboserviceapi.service;

/**
 * com.psq.dubboserviceapi.service.SayHelloService.java
 * Description: 示例接口
 *
 * @author Peng Shiquan
 * @date 2021/8/15
 */
public interface SayHelloService {
    /**
     * Description:示例方法
     *
     * @param
     * @return java.lang.String
     * @Author Peng Shiquan
     * @Date 2021-08-15
     */
    String sayHello();
}

? 实现方法如下:

package com.psq.dubbboserviceprovider.server;

import com.psq.dubboserviceapi.service.SayHelloService;
import org.apache.dubbo.config.annotation.Service;

/**
 * com.psq.dubbboserviceprovider.server.SayHelloServiceImpl.java
 * Description: SayHelloServiceImpl
 *
 * @author Peng Shiquan
 * @date 2021/8/15
 */
@Service
public class SayHelloServiceImpl implements SayHelloService {

    @Override
    public String sayHello() {
        return "This dubbo test";
    }
}

? 需要注意这里的service注解不是spring的注解。是Dubbo的注解。

消费者代码编写

? 消费者代码相差不多,pom文件和生产者类似,除了多了一个webstarter,这里就不再贴上代码了。

? 配置文件代码如下:

server:
  port: 8081
spring:
  application:
    name: dubbo-service-consumer

dubbo:
  application:
    name: dubbo-service-consumer
  registry:
    address: zookeeper://127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
    protocol: dubbo
    port: 20881

? 需要注意不要和你的监控中心端口冲突。其他就没有需要注意的了。

? 这里就简单写一个http请求接口,直接访问生产者的代码,具体代码如下:

package com.psq.dubboserviceconsumer.controlle;

import com.psq.dubboserviceapi.service.SayHelloService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * SayHelloController.java
 * Description:
 *
 * @author Peng Shiquan
 * @date 2021/8/21
 */
@RestController
public class SayHelloController {

    @Reference
    private SayHelloService sayHelloService;

    @GetMapping("/sayHello")
    public String sayHello() {
        String result = sayHelloService.sayHello();
        return result;
    }
}

? 启动两个服务后,访问地址:http://localhost:8081/sayHello出现以下画面即代表调用成功,监控中心也会有对应的记录。

image-20210824232818441

image-20210824232906127

? 至此,Dubbo的简单Demo就完成了,后续会慢慢补充一下配置的相关信息和对于Dubbo底层的学习。

? 就这样吧,结束。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:44:09  更:2021-08-27 11:44:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:07:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码