DubboDubbo官网 Dubbo 文档 | Apache Dubbo
了解 Dubbo 核心概念和架构
以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。
服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo Admin 控制台等,如果采用了 Service Mesh 架构则还包含 Istio 等服务网格控制面。
Dubbo 数据面
。数据面代表集群部署的所有 Dubbo 进程,进程之间通过 RPC 协议实现数据交换,Dubbo 定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。
服务消费者 (Dubbo Consumer),发起业务调用或 RPC 通信的 Dubbo 进程
服务提供者 (Dubbo Provider),接收业务调用或 RPC 通信的 Dubbo 进程
Dubbo 数据面从数据面视角,Dubbo 帮助解决了微服务实践中的以下问题:
Dubbo 作为 服务开发框架 约束了微服务定义 ...
聊天室引出该文
前置提要Netty WebSocket Server代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475@Slf4j@Configurationpublic class NettyWebSocketServer { // 开启netty服务端口8090 public static final int WEB_SOCKET_PORT = 8090; // 创建线程池执行器 private EventLoopGroup bossGroup = new NioEventLoopGroup(1); private EventLoopGroup workerGroup = new NioEventLoopGroup(NettyRuntime.availableProcessors()); /** ...
Spring
未读微服务篇章
SpringCloud入门理论CAP理论CAP即:
Consistency(一致性) 对某个指定的客户端来说,读操作保证能够返回最新的写操作结果
Availability(可用性) 非故障的节点在合理的时间内返回合理的响应(不出现错误或超时)
Partition tolerance(分区容忍性) 某一块出现故障不影响其另外的运行
经常用微服务的小伙伴应该知道, CAP就是说一个分布式系统不可能同时满足C、A、P这三个特性
对于分布式架构项目来说, 一般P是肯定满足的, 那么仅仅剩下C和A了
CP: 满足一致性和分区容忍性,牺牲可用性。当网络分区发生时,系统只保留一个分区继续提供服务,其他分区不可用,直到网络恢复正常。 应用: ZooKeeper, HBase, MongoDB, Redis(集群模式)等。这些系统通常用于需要强一致性的场景,如协调、锁服务、元数据管理等
AP: 满足可用性和分区容忍性,牺牲一致性。当网络分区发生时,系统保持所有分区都可用,但可能返回过期的数据,直到数据同步完成。 应用: Eureka, Cassandra, ...
旋转小人实现代码参考 codepen
codepen代码
123456789101112131415161718192021<div class="twopeople"> <div class="container" style="height:200px;"> <canvas class="illo" width="800" height="800" style="max-width: 200px; max-height: 200px; touch-action: none; width: 640px; height: 640px;"></canvas> </div> <script src="https://cdn.jsdelivr.net/gh/Justlovesmile/ ...
RabbitMQRabbitMQ是基于Erlang(处理并发)语言开发的开源消息通信中间件,官网地址:
https://www.rabbitmq.com/
环境搭建基于Docker安装RabbitMQ, 使用命令如下
12# 查询版本docker search rabbitmq
123456789# linuxdocker run \-d \--name=rabbitmq-server \-p 15672:15672 \-p 5672:5672 \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=123456 \rabbitmq:3.11.28-management
12# windocker run --name=rabbitmq-server -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -d rabbitmq:3.11.28-management
15672:RabbitM ...
若依前后端分离快速开发直达链接官网直达: RuoYi 若依官方网站
Gitee源码地址: RuoYi-Vue: 🎉 基于SpringBoot 前后端分离权限管理系统
初始化项目在本地克隆项目下来, 然后先跑通前后端项目
对于该项目, 我们主要开发基本逻辑在admin处, 初始化后, 需要在根目录下选择SQL文件夹打开导入(quartz.sql 和 ry_xxx.sql)导入在我们的项目, 修改连接池(以及其他的配置—如需修改的话:例如Redis) , 启动MySQL,Redis.
如需修改系统自带的路由, 则可在刚刚创建初始化的SQL表中(sys_menu)删除对应的路由(可选), 例如删除左侧路由(若依官网), 则直接在sys_menu表中删除对应字段即可
日志文件: admin模块中logback.xml可选
分析自己的项目结构此项主要是分析数据库某表需要什么字段(建表), 需要什么功能(CRUD)
操作流程基于上一步的建表以及分析后, 表已经有了
跑通前后端项目, 可以看到主页, 流程:
选择 #系统管理 下的 #菜单管理
添 ...
设计模式23个设计模式分类总体来说设计模式分为三大类:
创建型模式,共五种:
工厂方法模式、抽象工厂模式、单例模式、建造者(构造器)模式、原型模式。
结构型模式,共七种:
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
责任链模式责任链模式在框架的引用极为广泛, 例如SpringSecurity的过滤器链, Sentinel的插槽(限流, 降级, 系统保护等),他们实现就像一条链子一样 一级一级的往下走。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
建造者(构造器)模式建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,建造者模式是一种对象创建型模式。:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,建造者模式是一种对象创建型模式。
最常见的是 ...
对于微信扫码登录,首先我们需要有一个公众号平台账号(可以是测试账户,也可以是已经注册绑定营业的账户).
前言直达链接(当前样例仅在测试号环境下处理):
微信公众平台管理
网页授权文档
还需要准备一个内网穿透的工具(任选其一即可)
ngrok
花生壳
在此仅列出俩个, 需要获取更多信息 链接
内网穿透一句话来说就是,让外网能访问你的内网;把自己的内网(主机)当成服务器,让外网能访问
所以我们需要通过工具配置(当然你也可以不用工具,我在此使用工具的方式实现)
Ngrok首先在Ngrok注册账号, 点击上面链接下载Ngrok
打开ngrok在弹出控制台输入
1ngrok http 80
例如我需要映射本地的80端口, 输入完成控制台会有一个回调显示, 复制映射地址即可
花生壳花生壳配置如图
配置依赖1234567891011121314151617181920212223242526272829<dependency> <groupId>org.springframework.boot</groupId> <a ...
Spring
未读待更新
SpringSecurity入门环境基于父依赖SpringBoot 2.7.3
导入依赖
12345678910<!--SpringBoot Web--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><!--SpringSecurity--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>
认证登录校验流程图
通过新的Debug方式了解Security内部逻辑SpringSecurity的原理其实就是 ...
HashMap理解1.说说你对hash算法的理解其实 hash 算法的本质上是对输入任意长度的输入进行编码,然后隐射成固定长度的输出。
追问:hash算法任意长度的输入 转化为了 固定长度的输出,会不会有问题呢?在程序中碰到 value 在经过计算后得到的 hash 值和之前的一样,这个其实就是 hash 冲突。
追问:hash冲突能避免么?避免理论上是不能避免的,比如我列举一个场景,就是我现在有 10 个苹果,但是抽屉只有 9 个,我要想全部放进去,那么肯定是有一个抽屉会多放的。所以只能尽量的避免,但是不可能完全避免的。
2.你认为好的hash算法,应该考虑点有哪些呢?第一点:这个hash算法 它一定效率得高,要做到长文本也能高效计算出hash值嘛。
第二点:不能逆推原文
第三点:hash 后,尽可能的使其排列比较分散,尽可能的减少冲突
3.HashMap中存储数据的结构是什么样的呢?java8 中,数组 + 链表/红黑树
然后每一个数据单元其实就是一个 Node,然后 Node结构中有key字段、有value字段、还有next字段、还有hash字段。
然后 next 字段 ...