当前位置: 首页 > news >正文

springboot+dubbo+zookeeper 项目实战

现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。
springboot集成dubbo
dubbo框架总结
因此我们需要使用dubbo,也就是rpc协议。

创建rpc系统项目

项目结构

在这里插入图片描述

第一步引入依赖

 <!--dubbo 依赖--><dependency><groupId>com.alibaba.spring.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><!-- zkClient 依赖 --><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></exclusion><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions></dependency>

开启dubbo

使用@EnableDubbo 开启Dubbo
在这里插入图片描述@EnableDubbo 是一个复合注解
在这里插入图片描述
他里面的@DubboComponentScan,同Component组件能力相同。
@EnableDubbo做了两件事,一个是初始化Dubbo核心组件,加载Dubbo配置到内存。另一个是注册BeanPostProcessor,用来扫描@Service和@Reference注解。

创建yml配置文件

server:port: 9092                               # 项目访问端口,默认 8080servlet:                                 # 项目访问路径,默认 /context-path: /shop-rpc# Spring
spring:# 数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/shop?username: rootpassword: 123123# 指定 druid 连接池以及 druid 连接池配置type: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 1                       # 初始连接数max-active: 20                        # 最大连接数max-idle: 20                          # 最大空闲min-idle: 1                           # 最小空闲max-wait: 60000                       # 最长等待时间# redis 缓存redis:timeout: 10000                          # 连接超时时间host: 192.168.186.128                    # Redis服务器地址port: 6379                              # Redis服务器端口database: 0                             # 选择哪个库,默认0库lettuce:pool:max-active: 1024                    # 最大连接数,默认 8max-wait: 10000                     # 最大连接阻塞等待时间,单位毫秒,默认 -1max-idle: 200                       # 最大空闲连接,默认 8min-idle: 5                         # 最小空闲连接,默认 0password: 123123#允许循环依赖main:allow-circular-references: true# Dubbo
dubbo:#开启dubbo服务,表示该应用是一个服务提供者server: true# 提供方应用信息,用于计算依赖关系application:name: rpc-provider# 使用 zookeeper 配置注册中心地址,后面的backup为备用地址,注册中心地址不是随便的,是需要查找的registry:address: zookeeper://192.168.186.128:2181# 用 dubbo 协议在 20880 端口暴露服务protocol:name: dubboport: 20880# 扫描需要暴露的服务接口包,如果有多个包,可以使用逗号隔开scan:base-packages: com.wll.shoprpc.service# MyBatis
mybatis:# 配置 MyBatis数据返回类型别名(默认别名是类名)type-aliases-package: com.wll.shoprpc.pojo# 配置 MyBatis Mapper 映射文件mapper-locations: classpath:mapper/*.xml# Mybatis SQL 打印(方法接口所在的包,不是 Mapper.xml 所在的包)
logging:level:com.wll.shoprpc.mapper: debug# Redis Key
# 商品分类列表 Key
goods.category.list.key: goods:category:list:goodsCategoryList
#用户购物车key
user.cart: userCart

zppkeeper的ip地址就是运行zookeeper的虚拟机或主机地址,这里需要暴露服务接口用dubbo.scan.base-packages
zookeeper的端口号看zoo.conf中设置的端口号,需要一一对应。

写服务接口,服务实现类,mapper,mapper.xml

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service(interfaceClass = GoodsCategoryService.class,version="1.0.0",timeout = 5000)
public class GoodsCategoryServiceImpl implements GoodsCategoryService {

在Service实现类上需要加上alibaba.dubbo的@Service注解!!!!千万不能导错包!!!!
还需要加上@Component注解,把该实现类放入到spring容器中管理。

修改消费者前台系统

第一步导入依赖

同上

第二步开启dubbo

同上

第三步修改yml

server:port: 9091                                # 项目访问端口,默认 8080servlet:                                 # 项目访问路径,默认 /context-path: /shop-portal
# Spring
spring:# 数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/username: rootpassword: 123123# 指定 druid 连接池以及 druid 连接池配置type: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 1                       # 初始连接数max-active: 20                        # 最大连接数max-idle: 20                          # 最大空闲min-idle: 1                           # 最小空闲max-wait: 60000                       # 最长等待时间# freemarker 模板引擎freemarker:cache: falsecharset: UTF-8content-type: text/html;charset=UTF-8enabled: truesuffix: .ftlhtemplate-loader-path: classpath:/views/# 配置模板里是否可以直接取request的属性 request是别名request-context-attribute: request# 配置将request和session中的键值添加到# AbstractTemplateView类的renderMergedOutputModel方法中的model这个Map参数中expose-request-attributes: trueexpose-spring-macro-helpers: true# 配置模板里是否可以直接取session的属性 true 是允许expose-session-attributes: truesettings:tag_syntax: auto_detect               # 配置标签语法为自动,页面可以将 <> 改为 [],为了区别 html 标签template_update_delay: 0              # 模板更新时间,单位秒default_encoding: UTF-8               # 默认编码字符集output_encoding: UTF-8                # 模板输出编码字符集locale: zh_CN                         # 本地化配置date_format: yyyy-MM-dd               # 日期格式化time_format: HH:mm:ss                 # 时间格式化datetime_format: yyyy-MM-dd HH:mm:ss  # 日期时间格式化number_format: #.##                   # 数字格式化boolean_format: true,false            # boolean格式化# ignore,debug,html_debug,rethrow# 1.TemplateExceptionHandler.IGNORE_HANDLER简单地压制所有异常# 它对处理异常没有任何作用,也不会重新抛出异常,页面可以正常渲染,后台抛异常# 2.TemplateExceptionHandler.DEBUG_HANDLER打印堆栈信息和重新抛出异常。这是默认的异常控制器# 3.TemplateExceptionHandler.HTML_DEBUG_HANDLER和DEBUG_HANDLER相同# 但是可以格式化堆栈跟踪信息,HTML页面,建议使用它而不是DEBUG_HANDLER# 4.TemplateExceptionHandler.RETHROW_HANDLER简单重新抛出所有异常而不会做其他的事情# 5.使用自定义异常类实现TemplateExceptionHandler重写handleTemplateException方法template_exception_handler: html_debug# 文件上传servlet:multipart:max-file-size: 100MB                  # 设置单个上传文件的大小max-request-size: 1000MB               # 设置一次请求上传文件的总容量# redis 缓存redis:timeout: 10000ms                        # 连接超时时间host: 192.168.186.128                   # Redis服务器地址port: 6379                              # Redis服务器端口database: 0                             # 选择哪个库,默认0库lettuce:pool:max-active: 1024                    # 最大连接数,默认 8max-wait: 10000ms                   # 最大连接阻塞等待时间,单位毫秒,默认 -1max-idle: 200                       # 最大空闲连接,默认 8min-idle: 5                         # 最小空闲连接,默认 0password: 123123main:allow-circular-references: true# Dubbo
dubbo:#开启dubbo服务server: true# 消费方应用信息,用于计算依赖关系application:name: rpc-consumer-portal# 使用 zookeeper 注册中心暴露服务地址registry:address: zookeeper://192.168.186.128:2181# MyBatis
mybatis:# 配置 MyBatis数据返回类型别名(默认别名是类名)type-aliases-package: com.wll.shopportal.pojo# 配置 MyBatis Mapper 映射文件mapper-locations: classpath:mapper/*.xml# Mybatis SQL 打印(方法接口所在的包,不是 Mapper.xml 所在的包)
logging:level:com.wll.shopportal.mapper: debug#用户票据key
user.ticket: user:userTicket

第四步从注册中心拿服务者提供的服务

import com.alibaba.dubbo.config.annotation.Reference;
import com.wll.shoprpc.service.GoodsCategoryService;
import com.wll.shoprpc.vo.GoodsCategoryVo;
@Controller
public class GoodsController {@Reference(interfaceClass = GoodsCategoryService.class,version="1.0.0",timeout = 5000)GoodsCategoryService goodsCategoryService;@RequestMapping("/goodsCategory/list")@ResponseBodypublic List<GoodsCategoryVo> queryGoodsCategoryList(){return goodsCategoryService.selectCategoryListForView();}
}

使用@Reference注解拿取服务

使用监控中心 dubbo-admin

相关文章:

springboot+dubbo+zookeeper 项目实战

现在有一段代码再前台&#xff0c;后台系统中都存在&#xff0c;都需要这段代码&#xff0c;存在这种情况&#xff0c;我们可以选择将这段代码提取出来作为一个服务&#xff0c;让前台和后台系统作为消费者远程调用这段代码&#xff0c;提高了代码的复用性。 springboot集成dub…...

PHP学习笔记第一天

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽的博客_CSDN博客-网络安全,CTF,内网渗透领域博主 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan 目录 PHP语法 基本的PHP语法 PHP的数据类型 PH…...

案例研究|萤石网络通过JumpServer解决安全运维难题

杭州萤石网络股份有限公司&#xff08;以下简称为萤石网络&#xff09;于2015年在杭州成立&#xff0c;是安全智能生活主流品牌&#xff0c;核心产品包括智能家居摄像头、智能门锁、智能服务机器人等。2021年&#xff0c;萤石网络家用摄像头占国内出货量市场份额的25%&#xff…...

即时聊天app开发-即时通讯app开发方案分析

如今&#xff0c;即时聊天APP层出不穷&#xff0c;它已经成为人们日常生活中密不可分的社交工具。如今&#xff0c;即时聊天APP不仅是聊天工具&#xff0c;也是企业营销的利器。我们经常可以在聊天主页上看到一些广告。如有必要&#xff0c;用户可以直接点击广告了解详情。即时…...

js为什么会阻塞渲染, 什么是异步?

javaScript 是单线程执行的语言&#xff0c;它的执行机制是基于事件循环模型的。当 JavaScript 执行代码时&#xff0c;如果遇到阻塞&#xff08;如执行时间较长的代码、同步的网络请求、计算密集型操作等&#xff09;&#xff0c;则会阻塞 JavaScript 引擎的执行&#xff0c;直…...

Nuvoton NK-980IOT开发板 u-boot 编译

前言 最近搭建了 Nuvoton NK-980IOT开发板 的开发编译环境&#xff0c;记录一下 u-boot 的 编译流程 Nuvoton NK-980IOT开发板 资源还是比较的丰富的&#xff0c;可以用于 嵌入式Linux 或者 RT-Thread 的学习开发 开发板上电比较的容易&#xff0c;两根 USB 线即可&#xff0…...

OpenCL使用CL_MEM_USE_HOST_PTR存储器对象属性与存储器映射

随着OpenCL的普及&#xff0c;现在有越来越多的移动设备以及平板、超级本等都支持OpenCL异构计算。而这些设备与桌面计算机、服务器相比而言性能不是占主要因素的&#xff0c;反而能耗更受人关注。因此&#xff0c;这些移动设备上的GPU与CPU基本都是在同一芯片上&#xff08;So…...

浅谈osgEarth操控器类的createLocalCoordFrame函数如何将局部坐标系的点转为世界坐标系下的Martix(ENU坐标)

在osgEarth操控器类的EarthManipulator中的如下函数&#xff1a; void EarthManipulator::setLookAt(const osg::Vec3d& center,double azim,double pitch,double range,const osg::Vec3d& posOffset) {setCenter( center );.... //…...

PHP程序员和Python程序员的职业前景怎么样?我来聊聊自己的体会

大家好&#xff0c;今天我们来聊一下程序员这个职业的特点。在讲这个话题之前&#xff0c;我先说一下我自己的情况&#xff1a;我在福州和深圳做了8年左右的程序员&#xff0c;然后回到老家&#xff0c;在家里面为福州的一个公司做远程开发。目前已经在老家做了将近3年。 今天…...

【MATLAB图像处理实用案例详解(8)】—— 图像数字水印算法

目录 一、背景意义二、基本原理三、算法介绍3.1 数字水印嵌入3.2 数字水印提取 四、程序实现 一、背景意义 数字水印技术作为信息隐藏技术的一个重要分支&#xff0c;是将信息(水印)隐藏于数字图像、视频、音频及文本文档等数字媒体中&#xff0c;从而实现隐秘传输、存储、标注…...

最全的免费SSL证书申请方式

在SSL广泛普及的今天&#xff0c;申请一张免费的SSL证书是一件非常容易的事情。这里为大家总结当前阶段(2023年)拥有一张免费SSL证书的方式。首推的方式为来此加密网站&#xff0c;文章后面会有详细的介绍。 下面介绍几种获取免费SSL证书的方式&#xff0c;大家可以根据自己的…...

Ceph入门到精通-CrushMap算法概述

下面是伪代码object到osd的伪代码 locator =object_name obj_hash =hash(locator) pg =obj_hash %num_pg OSDs_for_pg =crush(pg) # returns a list of OSDs primary =osds_for_pg[0] replicas =osds_for_pg[1:] defcrush(pg): all_osds=[osd.0,osd.1,osd.2,...] resu…...

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展&#xff0c;电子商务成为了众多企业的首选模式&#xff0c;而开放API则成为了电商业务中不可或缺的部分。API&#xff08;Application Programming Interface&#xff09;&#xff0c;即应用程序接口&#xff0c;是软件系统不同组件之间交互的约定。电…...

Give me a logic game idea about economics

Here’s an logic game idea about economics: Game name: “Economics Tycoon” Game Objective: Build an economic empire and grow from a small business owner to a global tycoon. Gameplay: Start with a small business and limited resources. Manage your compa…...

测试之路,2023年软件测试市场领域有哪些变化?突破走得更远...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…...

配置Windows终端直接执行Python脚本,无需输入“python“

配置Windows终端直接执行Python脚本&#xff0c;无需输入"python" 1. 将Python加入环境变量2. 将Python后缀加入环境变量PATHEXT中3. 修改Python脚本的默认打开方式4. *将Python脚本命令加入环境变量*5. 测试 在Linux系统中&#xff0c;在Python脚本的开头指定Python…...

IDEA快捷键

文章目录 快捷键介绍重点掌握CtrlAltShiftCtrl AltCtrl ShiftAlt ShiftCtrl Shift Alt其他 快捷键介绍 重点掌握 psvmmain函数sout输出soutv带变量名输出.sout变量.调用 输出变量值.if布尔值.调用 生成if语句.for数组类型变量.for 生成for语句.var补全接收的变量&#x…...

关于c++指针数组的要设置初值的情况

在大多数情况下&#xff0c;都应该对指针数组进行初始化&#xff0c;以避免出现未知的值和潜在的未定义行为。指针数组在定义时必须指定元素个数&#xff0c;如果未指定元素值&#xff0c;则需要对其进行显式初始化。如果未初始化数组&#xff0c;则未知的值可能指向无效的内存…...

泰克RSA306B频谱分析仪测试信道功率方法

泰克RSA306B实时频谱分析仪是一种用于无线信号分析的仪器。它可以实时监控无线信号的频谱&#xff0c;帮助用户分析信号特征&#xff0c;掌握信号的功率、频率、调制等关键信息。在无线通信中&#xff0c;信道功率是一个非常重要的指标&#xff0c;它反映了信号在传输过程中的强…...

深度学习技巧应用12-神经网络训练中批归一化的应用

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用12-神经网络训练中批归一化的应用,在深度学习中,批归一化(Batch Normalization,简称BN)是一种重要的技巧,它在许多神经网络中都得到了广泛应用。本文将详细介绍批归一化的原理和应用,并结合PyTorch框架构建一个简…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...