从零开始搭建Dubbo环境并整合Dubbo+SpringBoot

news2024/11/19 6:39:08

Windows环境搭建

1. 安装Zookeeper

下载 zookeeper3.5 下载地址 https://zookeeper.apache.org/releases.html#download

下载完成以后, 解压到一个目录下

image-20230108204601006

然后把 zoo_sample.cfg 复制一份, 重命名为 zoo.cfg

image-20230108204642138

修改配置文件 zoo.cfg 中的 dataDir 这个配置 修改为 dataDir=../zkdata

# The number of milliseconds of each tick 
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=../zkdata
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

然后再根目录下面创建一个 zkdata的目录

image-20230108204857557

然后在bin目录下, 打开控制台 执行 .\zkServer.cmd 注意和linux下区分, linux下的命令是 zkServer.sh start

image-20230108205016838

上面这样就是启动成功了

2. 安装Dubbo-Admin

我安装的版本是 dubbo-admin-0.1.0 , 其他版本应该也可以, 安装dubbo-admin 之前需要你有maven和nodejs的环境

下载地址 https://github.com/apache/dubbo-admin/releases

下载完成以后需要解压到一个目录下

image-20230108205456132

然后找到 dubbo-admin-server/src/main/resource/application.properties 修改配置


# centers in dubbo2.7
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181

admin.root.user.name=root
admin.root.user.password=root
#group
admin.registry.group=dubbo
admin.config-center.group=dubbo
admin.metadata-report.group=dubbo

admin.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
admin.apollo.appId=test
admin.apollo.env=dev
admin.apollo.cluster=default
admin.apollo.namespace=dubbo
# 防止端口占用
server.port=8081

一般来说我们需要修改的配置只有以下, 但是因为我们是在windows下配置的, 所以 127.0.0.1 就不用改, 如果你是虚拟机或者在云服务器上的 , 就要改成相应的ip

# centers in dubbo2.7
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181

然后就是需要自己定义dubbo-admin端口, 因为默认是8080, 但是多半会被其他引用占用, 所以我们改成 8081

# 防止端口占用
server.port=8081

修改完成以后我们回到 dubbo-admin的根目录 打开控制命令台执行, mvn clean package 打包

PS E:\DevAppSpace\dubbo-admin-develop\dubbo-admin-develop> mvn clean package

打包结果是下面这样的

1578300464726

打包完成以后我们会在下面的目录看到一个jar包

image-20230108210048989

然后执行这个jar包即可

image-20230108210150282

这样的话就算是启动了, 我们只需要去访问 http://localhost:8081/#/ 即可, 默认的账号密码都是 root


其他事项 : 以上教程适用于dubbo-admin-0.1.0 , 高版本其他内容大致一样, 但是如果访问http://localhost:8081/#/不行的话, 可能需要dubbo-admin-ui目录下执行

npm run dev
npm run dev

1578300677041

Dubbo整合SpringBoot

dubbo整合Spring在dubbo官网上就有, 我就不再写了, 主要是讲一下怎么和SpringBoot工程整合

1. 创建SpringBoot项目

我们需要分别创建两个SpringBoot项目, 分别是 dubbo-spring-consumer 和 dubbo-spring-provider, 一个是消费者, 一个是提供者

创建完成以后我们需要添加相关依赖 :

springboot-start 的依赖我使用的是 2.3.5.RELEASE 版本的

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

其他的核心依赖主要是下面的 , 消费者和 生产者的依赖是相同的

		<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.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>

2. 添加配置

首先是 dubbo-spring-provider

server:
  port: 9091

spring:
  application:
    name: dubbo-provier

dubbo:
  # dubbo 应用名称
  application:
    name: dubbo-provier
  # 注册中心地址, 就是我们之前的 zookeeper的地址
  registry:
    address: zookeeper://127.0.0.1:2181
  # dubbo服务提供的扫描的包
  scan:
    base-packages: cn.knightzz.service.impl
  # 使用的协议以及端口号
  protocol:
    name: dubbo
    port: 20880

其次是 dubbo-spring-consumer

server:
  port: 9090

spring:
  application:
    name: dubbo-consumer

dubbo:
  application:
    name: dubbo-consumer # 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样
  registry:
    address: zookeeper://127.0.0.1:2181
  scan:
    base-packages: cn.knightzz.service.impl
  protocol:
    name: dubbo
    port: 20880

3. 编写代码

首先是 dubbo-spring-provider 项目框架 如下

image-20230108211203924

在 UserService 里面我们编写一个接口

package cn.knightzz.service;

/**
 * @author 王天赐
 * @title: ConsumerService
 * @projectName dubbo-codes
 * @description:
 * @website <a href="http://knightzz.cn/">http://knightzz.cn/</a>
 * @github <a href="https://github.com/knightzz1998">https://github.com/knightzz1998</a>
 * @create: 2023-01-08 10:08
 */
public interface UserService {

    String sayHello(String name);
}

在 UserServiceImpl 添加实现

package cn.knightzz.service.impl;

import cn.knightzz.service.UserService;
import org.apache.dubbo.config.annotation.Service;

/**
 * @author 王天赐
 * @title: ConsumerServiceImpl
 * @projectName dubbo-codes
 * @description:
 * @website <a href="http://knightzz.cn/">http://knightzz.cn/</a>
 * @github <a href="https://github.com/knightzz1998">https://github.com/knightzz1998</a>
 * @create: 2023-01-08 10:08
 */
@Service // 这里的service注解不能使用spring的注解,要使用dubbo中的注解
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello(String name) {
        return "Hello" + name;
    }
}

在这里我们需要重点注意的是, 我们使用的 @Service 这个注解并非是 Spring 提供的注解, 而是 dubbo提供的,

注解包名是 org.apache.dubbo.config.annotation.Service;

最后我们需要在启动类上加上开启 Dubbo的注解 @EnableDubbo

package cn.knightzz;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


/**
 * @author 王天赐
 * @title: ProviderApplication
 * @projectName dubbo-codes
 * @description:
 * @website <a href="http://knightzz.cn/">http://knightzz.cn/</a>
 * @github <a href="https://github.com/knightzz1998">https://github.com/knightzz1998</a>
 * @create: 2023-01-08 10:00
 */
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {

    public static void main(String[] args) {

        SpringApplication.run(ProviderApplication.class, args);
    }
}


其次是dubbo-spring-consumer 部分的代码, 项目结构如下

image-20230108211624927

另外就是, 服务是可以相互提供的, 并不是固定的

UserService 这里和之前的一样, 我们不需要具体的实现 因为我们要调用 dubbo-spring-provider

package cn.knightzz.service;

/**
 * @author 王天赐
 * @title: ConsumerService
 * @projectName dubbo-codes
 * @description:
 * @website <a href="http://knightzz.cn/">http://knightzz.cn/</a>
 * @github <a href="https://github.com/knightzz1998">https://github.com/knightzz1998</a>
 * @create: 2023-01-08 10:08
 */
public interface UserService {

    String sayHello(String name);
}

然后的话就是需要编写 Controller

package cn.knightzz.controller;

import cn.knightzz.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 王天赐
 * @title: UserController
 * @projectName dubbo-codes
 * @description:
 * @website <a href="http://knightzz.cn/">http://knightzz.cn/</a>
 * @github <a href="https://github.com/knightzz1998">https://github.com/knightzz1998</a>
 * @create: 2023-01-08 10:28
 */
@RestController
public class UserController {

    @Reference
    UserService userService;

    @RequestMapping("/test")
    public String test() {
        return userService.sayHello("test");
    }

}

@Reference 用的也是dubbo的注解, 同样我们也需要在启动类开启 Dubbo的支持

package cn.knightzz;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author knightzz98
 */
@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {

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

}

4. 测试

分别启动两个项目

image-20230108212147378

然后访问 http://localhost:9090/test

image-20230108212208011

这里可以看到打印的结果, 说明我们的项目已经连通了, Over !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pygame - 图片移动优化 - 引入面向对象思想

目录 一、基本框架 二、代码段 1、附注释 2、无注释 三、效果展示 备注&#xff1a;pygame - 图片移动优化中未对属性和方法进行封装&#xff0c;本篇文章将引入面向对象思想 一、基本框架 import sys import time import pygamepygame.init()SCREEN_WIDTH 680 SCREEN…

基于机器学习预测销售门店的商品销量详细教程

项目概述: 使用时间序列预测来预测来Corporacin Favorita 的数据的商店销售额。 具体来说,构建一个模型来更准确地预测在不同 Favorita 商店销售的数千种商品的单位销售额。您将使用包含日期、商店和商品信息、促销和单位销售的易于理解的训练数据集来练习您的机器学习技能。…

【debug日记】安装包后还是有下划线可以运行、gensim包的安装及版本不同引起的参数不匹配问题

文章目录gensim包版本不同引起的参数不匹配问题安装gensim包后还是有下划线可以运行gensim包的安装问题今天的debug历程可谓一步一个坑。首先我去github上下载了一个项目&#xff0c;关于graph embedding https://github.com/shenweichen/GraphEmbedding 我下载下来直接运行&a…

软件测试 -- 进阶 10 常见软件测试类型

业精于勤&#xff0c;荒于嬉&#xff1b;行成于思&#xff0c;毁于随。-- 韩愈 释译&#xff1a;学业因勤奋而专精&#xff0c;因玩乐而荒废&#xff1b;德行因独立思考而有所成就&#xff0c;因因循随俗而败坏。 是否执行程序/测试执行方法 - 静态测试 - 动态测试 …

如何简单的做量化交易

介绍 首先我不是量化工程师&#xff0c;我只是个后端工程师&#xff1b;其次我对量化也不感兴趣&#xff0c;自己有几把刷子还是了解的&#xff0c;自己不适合做量化交易&#xff1a; 自己没有优秀的模型设计能力自己是个长线投资&#xff0c;一般一个股票都是至少拿一年以上…

【五】Netty 传输Java对象

Netty 传输Java对象介绍业务场景模拟流程图代码展示订购采购消息 POJO 类订购应答消息 POJO 类服务端启动类 SubscribeReqServer服务端业务处理类 SubscribeServerHandler客户端启动类 SubscribeClient客户端 业务处理类 SubscribeClientHandler效果展示服务端打印客户端打印总…

20230109网安陈之琳材料大纲-web渗透

目录 引言 正文 信息收集 端口扫描 敏感目录的扫描 主机漏洞扫描 常见的漏洞及防御 SQL注入漏洞 目录遍历漏洞/文件包含漏洞 提权 删日志 引言 首先呢&#xff0c;经过我本人对此篇论文的研读&#xff0c;发现此篇论文属于web方向的一篇入门文章 梁本来前辈对常见…

使用Docker Compose一键部署前后端分离项目

目录 一、安装Docker和docker Compose &#xff08;1&#xff09;Docker安装 &#xff08;2&#xff09;Docker Compose安装 &#xff08;3&#xff09;查看版本信息 二、准备工作 1. 新建工作目录 2. 工作目录结构 3. 后台打包 4. 前台打包 5. 数据库文件上传 6. 编…

Nginx反向代理和负载均衡配置

一.什么是反向代理 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受Internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给Internet上请求连接的客户端&#xff0c;此时代理服务器对外就…

Sentinel-限流 冷启动

概述 当流量突然增大的时候&#xff0c;我们常常会希望系统从空闲状态到繁忙状态的切换的时间长一些。即如果系统在此之前长期处于空闲的状态&#xff0c;我们希望处理请求的数量是缓步的增多&#xff0c;经过预期的时间以后&#xff0c;到达系统处理请求个数的最大值。Warm U…

在Mac上配置Vue开发环境

因为Vue是NodeJS的模块&#xff0c;要想使用Vue需要先安装NodeJS 在Mac中安装NodeJS通过brew包管理器就会很方便, 因为访问源速度问题建议使用5&#xff08;阿里&#xff09;&#xff0c;Homebrew开源项目地址&#xff1a;https://gitee.com/cunkai/HomebrewCN/blob/master/REA…

千锋教育+计算机四级网络-计算机网络学习-02

目录 分组交换的两种传输方式 数据报方式 ​编辑 虚电路方式 OSI参考模型 IP地址分类 公有IP 私有IP 回环ip地址 子网掩码 端口 端口号 端口分类 数据包的组装、拆解 网络应用程序开发流程 选择合适的协议&#xff08;TCP或UDP) TCP—面向连接 UDP—面向无连接 …

第八章面向对象编程(中级)

8.1访问修饰符 8.1.1基本介绍 java提供四种访问控制修饰符号&#xff0c;用于控制方法和属性&#xff08;成员变量&#xff09;的访问权限&#xff08;范围&#xff09;&#xff1a; 公开级别:用 public 修饰,对外公开受保护级别:用 protected 修饰,对子类和同一个包中的类公开…

基于Docker安装Nginx

基于Docker安装Nginx 1.安装Nginx 先启动一个 Nginx 实例, 可以得到相关配置 1.这里我将安装的软件放在/mydata目录下 #进入mydata目录 cd mydata/ #创建nginx目录 mkdir nginx # 拉取nginx 1.10版本镜像并允许容器 docker run -p 80:80 --name nginx -d nginx:1.10将容器内…

RHCE第四天之Web服务器详解

文章目录一、网址及HTTP简介二、www服务器的类型三、 www服务器的基本配置四、基于https协议的静态网站五、实验练习web服务器提供的数据大部分都是文件&#xff0c;那么我们需要在服务器端先将数据文件写好&#xff0c;并且放置在某个特殊的目录下面&#xff0c;这个目录就是我…

Profiler导致的严重性能问题

背景客户反馈系统突然运行非常缓慢&#xff0c;持续了近20分钟的时间&#xff0c;通过SQL专家云定位到有人开启了Profiler导致&#xff0c;但是不能定位是谁开启的&#xff0c;请我们协助分析。现象登录SQL专家云&#xff0c;进入实时可视化页面&#xff0c;在活动会话中看到在…

【Ctfer训练计划】——(十)

作者名&#xff1a;Demo不是emo主页面链接&#xff1a; 主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

智公网:这几类人员报考公务员无法被录取

对于很多人来讲&#xff0c;毕业之后都想找一份稳定的工作&#xff0c;目前最受欢迎的就是公务员和教师编了&#xff0c;我们今天来说下公务员这个铁饭碗。 公务员考试可是很不容易的&#xff0c;有两场考试&#xff0c;第一场是笔试&#xff0c;第二场是面试。笔试通过之后才…

2021-06-10 Multisim的74LS192功能表及555时基74LS190

缘由https://ask.csdn.net/questions/7445811?spm1005.2025.3001.5141以及60s倒计时电路连接后没有显示 - 24小时必答区 74LS192芯片是一个具有双计数功能的芯片&#xff0c;既可以做加计数&#xff0c;也可以做减计数。 1、A、B、C、D 置数输入端&#xff0c;管脚悬空相当…

Web端接入视频设备(NVR/IPC)

概述 本文主要介绍视频监控设备&#xff0c;视频监控设备接入&#xff0c;常用的开源流媒体及接入过程中的一些问题。 第一章 视频监控设备 目前常见的视频监控设备主要有NVR和IPC&#xff0c;以海康为例。 1.1 视频监控设备介绍 IPC即IP Camera&#xff0c;可以接入网络的…