<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[舞鹤白沙编码日志]]></title><description><![CDATA[探索、追求、执着、境界、永恒]]></description><link>https://blog.youkuaiyun.com/enterpc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; enterpc]]></copyright><item><title><![CDATA[scratch3文件转exe文件方法]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/129927244</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/129927244</guid><author>enterpc</author><pubDate>Mon, 03 Apr 2023 13:10:43 +0800</pubDate><description><![CDATA[6.复制粘贴如下内容到记事本，其中name表示最终生成的exe所显示的文件名称，main表示使用的html文件名称（需要自行修改为第二步生成并修改后的html文件名称），icons表示最终生成的exe所显示的图标（需要自行修改为自己使用的ico文件的名称）。3.自行准备一个icon文件或者使用我给的下载地址里的“测试1.icon”，将该icon文件复制粘贴到解压缩后的文件夹nwjs-v0.52.0-win-x64内部。2.nwjs-v0.52.0-win-x64.zip，用于将html文件打包为桌面应用。]]></description><category></category></item><item><title><![CDATA[GitBlit的使用教程]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/123342545</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/123342545</guid><author>enterpc</author><pubDate>Mon, 07 Mar 2022 23:20:10 +0800</pubDate><description><![CDATA[GitBlit的使用教程 
本文是基于Win 10系统环境，测试和使用GitBlit： 
Win 10GitBlit 
 
一、如何使用GitBlit 
（1）登入已经部署好的GitBlit服务器 
在网址输入框输入GitBlit服务器的地址，如图中的1，然后在2处登入用户名和密码  
（2）创建一个新的版本库 
点击图中1处的“版本...]]></description><category></category></item><item><title><![CDATA[Ribbon核⼼源码剖析]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122994355</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122994355</guid><author>enterpc</author><pubDate>Fri, 18 Feb 2022 01:07:11 +0800</pubDate><description><![CDATA[一. Ribbon⼯作原理



重点：Ribbon给restTemplate添加了⼀个拦截器

思考：Ribbon在做什么： 

当我们访问http://lagou-service-resume/resume/openstate/的时候，ribbon应该 

根据服务名lagou-service-resume获取到该服务的实例列表并按照⼀定的负载均衡 

策略从实例列表中获取⼀个实例Server，并最终通过RestTemplate进⾏请求访问



Ribbon细节结构图（涉及到底层的⼀些组件/类的描述.]]></description><category></category></item><item><title><![CDATA[Ribbon—— 第一代Spring Cloud核心组件高级应用]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122994282</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122994282</guid><author>enterpc</author><pubDate>Thu, 17 Feb 2022 23:54:30 +0800</pubDate><description><![CDATA[一. 关于负载均衡

负载均衡⼀般分为服务器端负载均衡和客户端负载均衡 

所谓服务器端负载均衡，⽐如Nginx、F5这些，请求到达服务器之后由这些负载均衡 

器根据⼀定的算法将请求路由到⽬标服务器处理。 

所谓客户端负载均衡，⽐如我们要说的Ribbon，服务消费者客户端会有⼀个服务器 

地址列表，调⽤⽅在请求前通过⼀定的负载均衡算法选择⼀个服务器进⾏访问，负 

载均衡算法的执⾏是在请求客户端进⾏。 

Ribbon是Netflflix发布的负载均衡器。Eureka⼀般配合Ribbon进⾏使⽤，Ri]]></description><category></category></item><item><title><![CDATA[Eureka核⼼源码剖析]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122992356</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122992356</guid><author>enterpc</author><pubDate>Thu, 17 Feb 2022 23:47:10 +0800</pubDate><description><![CDATA[目录



一. Eureka Server启动过程

观察类头分析

三个关注点

（一）关注点1

（二）关注点2

（三）关注点3

二. Eureka Server服务接⼝暴露策略

三. Eureka Server服务注册接⼝（接受客户端注册服务）

四. Eureka Server服务续约接⼝（接受客户端续约）

五. Eureka Client注册服务

（一）读取配置⽂件

（二）启动时从EurekaServer获取服务实例信息

（三）注册⾃⼰到EurekaServer

（四）开启⼀..]]></description><category></category></item><item><title><![CDATA[Eureka —— 第一代Spring Cloud核心组件高级应用]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122991327</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122991327</guid><author>enterpc</author><pubDate>Thu, 17 Feb 2022 21:27:31 +0800</pubDate><description><![CDATA[一. Eureka介绍

注意：服务注册中⼼本质上是为了解耦服务提供者和服务消费者。

对于任何⼀个微服务，原则上都应存在或者⽀持多个提供者（⽐如简历微服务部署 

多个实例），这是由微服务的分布式属性决定的。 

更进⼀步，为了⽀持弹性扩缩容特性，⼀个微服务的提供者的数量和分布往往是动 

态变化的，也是⽆法预先确定的。因此，原本在单体应⽤阶段常⽤的静态LB机制就 

不再适⽤了，需要引⼊额外的组件来管理微服务提供者的注册与发现，⽽这个组件 

就是服务注册中⼼。



（一）服务注册中⼼⼀般原理



]]></description><category></category></item><item><title><![CDATA[微服务案例引入及问题剖析]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122934033</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122934033</guid><author>enterpc</author><pubDate>Mon, 14 Feb 2022 23:40:13 +0800</pubDate><description><![CDATA[一. 案例说明

本部分我们按照普通⽅式模拟⼀个微服务之间的调⽤（后续我们将⼀步步使⽤ 

Spring Cloud的组件对案例进⾏改造）。




拉勾App⾥有这样⼀个功能：“⾯试直通⻋”，当求职⽤户开启了⾯试直通⻋之后，会 

根据企业客户的招聘岗位需求进⾏双向匹配。其中有⼀个操作是：为企业⽤户开启 

⼀个定时任务，根据企业录⼊的⽤⼈条件，每⽇匹配⼀定数量的应聘者“投递”到企业 

的资源池中去，那么系统在将匹配到的应聘者投递到资源池的时候需要先检查：此 

时应聘者默认简历的状态(公开/隐藏)，如]]></description><category></category></item><item><title><![CDATA[微服务架构及Spring Cloud概述]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122930256</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122930256</guid><author>enterpc</author><pubDate>Mon, 14 Feb 2022 19:10:52 +0800</pubDate><description><![CDATA[一. 微服务架构

（一）互联⽹应⽤架构发展（回顾）

 随着互联⽹的发展，⽤户群体逐渐扩⼤，⽹站的流量成倍增⻓，常规的单体架构已 

⽆法满⾜请求压⼒和业务的快速迭代，架构的变化势在必⾏。下⾯我们就以拉勾⽹ 

的架构演进为例，从最开始的单体架构分析，⼀步步的到现在的微服务架构。



1. 单体应⽤架构

在诞⽣之初，拉勾的⽤户量、数据量规模都⽐较⼩，项⽬所有的功能模块都放在⼀ 

个⼯程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应⽤ 

架构，这样的架构既简单实 ⽤...]]></description><category></category></item><item><title><![CDATA[基于Zookeeper实现简易版服务的注册与发现机制]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122866747</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122866747</guid><author>enterpc</author><pubDate>Thu, 10 Feb 2022 18:22:30 +0800</pubDate><description><![CDATA[一. 题目要求

（一）需求一

在基于Netty的自定义RPC的案例基础上，进行改造。基于Zookeeper实现简易版服务的注册与发现机制

要求完成改造版本：

\1. 启动2个服务端，可以将IP及端口信息自动注册到Zookeeper

\2. 客户端启动时，从Zookeeper中获取所有服务提供端节点信息，客户端与每一个服务端都建立连接

\3. 某个服务端下线后，Zookeeper注册列表会自动剔除下线的服务端节点，客户端与下线的服务端断开连接

\4. 服务端重新上线，客户端能感知到，并且与重新上]]></description><category></category></item><item><title><![CDATA[Dubbo进阶（二）Dubbo高级实战]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122853310</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122853310</guid><author>enterpc</author><pubDate>Thu, 10 Feb 2022 18:16:23 +0800</pubDate><description><![CDATA[一. SPI

（一）SPI简介

SPI 全称为 (Service Provider Interface) ，是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现，简单来说，它就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦， 使得第三方服务模块的装配控制逻辑与调用者的业务代码分离。



（二）JDK中的SPI





Java中如果想要使用SPI功能，先提供标准服务接口，然后再提供相关接口实现和调用者。这样就可以通过SPI机制中约定好的信息进行查询相应的接口实现。 .]]></description><category></category></item><item><title><![CDATA[Dubbo进阶（一）之Dubbo基础回顾]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122823204</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122823204</guid><author>enterpc</author><pubDate>Tue, 08 Feb 2022 15:07:00 +0800</pubDate><description><![CDATA[一.Dubbo架构概述

分布式系统架构解决方案—Dubbo(介绍)_舞鹤白沙编码日志-优快云博客

二. Dubbo入门案例

Dubbo快速入门_舞鹤白沙编码日志-优快云博客

Dubbo综合实战演练_舞鹤白沙编码日志-优快云博客

（一）简单入门案例完整代码

查看代码（请点击）

（二）最接近官方的入门案例注解形式完整代码

查看代码（请点击）

（三）最接近官方的入门案例XML形式完整代码

查看代码（请点击）

（四）整合MyBatis实现用户注册的Dubbo入门案例完整代码

查看代码（]]></description><category></category></item><item><title><![CDATA[dubbo连接zookeeper报Exception in thread “main“ java.lang.IllegalStateException: zookeeper not connected]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122821379</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122821379</guid><author>enterpc</author><pubDate>Tue, 08 Feb 2022 12:11:27 +0800</pubDate><description><![CDATA[修改办法

方法一：适用于xml配置dubbo的方案。


    &lt;dubbo:registry  id="registry1" address="zookeeper://localhost:2181" timeout="25000"/&gt;


或者


 &lt;dubbo:config-center timeout="25000"/&gt;


方法二：适用于api配置dubbo的方案。


    private static void startWithBootstrap() {
   ]]></description><category></category></item><item><title><![CDATA[Zookeeper源码分析]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122780625</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122780625</guid><author>enterpc</author><pubDate>Sat, 05 Feb 2022 15:48:21 +0800</pubDate><description><![CDATA[一. 源码环境搭建

（一）源码下载

1. 官方下载网址：


zookeeper-release-3.5.4下载地址：
：https://github.com/apache/zookeeper/tree/release-3.5.4
apache-ant-1.10.6-bin下载地址：
https://ant.apache.org/bindownload.cgi






2. 百度网盘下载地址

zookeeper-release-3.5.4下载地址：zookeeper-release-3.5.4
.]]></description><category></category></item><item><title><![CDATA[zookeeper源码分析之集群模式服务端]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122788308</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122788308</guid><author>enterpc</author><pubDate>Sat, 05 Feb 2022 11:47:20 +0800</pubDate><description><![CDATA[集群模式下启动所有的ZK节点启动⼊⼝都是QuorumPeerMain类的main⽅法。 main⽅法加载配置⽂件以后，最终会调⽤到QuorumPeer的start⽅法，来看下：










public void runFromConfig(QuorumPeerConfig config)
            throws IOException, AdminServerException
    {
      try {
          ManagedUtil.registerLog..]]></description><category></category></item><item><title><![CDATA[zookeeper源码分析之单机模式服务端启动]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122783967</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122783967</guid><author>enterpc</author><pubDate>Sat, 05 Feb 2022 10:06:25 +0800</pubDate><description><![CDATA[一. 源码分析前的准备

1. 在idea中打开Run/Debug Configurations,



2. 添加一个Application



3.运⾏主类 org.apache.zookeeper.server.QuorumPeerMain ，将zoo.cfg的完整路径配置在Program arguments。 

4. 在VM options配置，即指定到conf⽬录下的log4j.properties：


-Dlog4j.configuration=file:/javawork/zooke..]]></description><category></category></item><item><title><![CDATA[Zookeeper应用场景及深入进阶]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122777880</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122777880</guid><author>enterpc</author><pubDate>Thu, 03 Feb 2022 22:17:25 +0800</pubDate><description><![CDATA[一. Zookeeper应⽤场景

ZooKeeper是⼀个典型的发布/订阅模式的分布式数据管理与协调框架，我们可以使⽤它来进⾏分布式数据的发布与订阅。另⼀⽅⾯，通过对ZooKeeper中丰富的数据节点类型进⾏交叉使⽤，配合Watcher 事件通知机制，可以⾮常⽅便地构建⼀系列分布式应⽤中都会涉及的核⼼功能，如数据发布/订阅、命名 服务、集群管理、Master选举、分布式锁和分布式队列等。那接下来就针对这些典型的分布式应⽤场景 来做下介绍。



（二）数据发布/订阅

数据发布/订阅（Publish/Su]]></description><category></category></item><item><title><![CDATA[Zookeeper环境搭建和基本使用回顾]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122774887</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122774887</guid><author>enterpc</author><pubDate>Thu, 03 Feb 2022 13:50:06 +0800</pubDate><description><![CDATA[目录



一. Zookeeper简介

（一）分布式系统定义及⾯临的问题

（二）zookeeper的基本概念

二. Zookeeper环境搭建

（一）单机模式

（二）伪集群模式：

（三）集群模式：

三. Zookeeper基本使⽤

（一）ZooKeeper系统模型

1. ZooKeeper数据模型Znode

2. ZNode 的类型

3. 事务ID

4. ZNode 的状态信息

5. Watcher--数据变更通知

6. ACL--保障数据的安全

7. 权限模式：Schem.]]></description><category></category></item><item><title><![CDATA[分布式理论与分布式架构设计理论]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122767550</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122767550</guid><author>enterpc</author><pubDate>Wed, 02 Feb 2022 02:29:33 +0800</pubDate><description><![CDATA[目录



一. 分布式架构介绍

（一）什么是分布式系统

（二）分布式与集群的区别

（三）分布式系统特性

（四）分布式系统面临的问题

​二.分布式理论

（一）数据一致性

1.什么是分布式数据一致性

2. 副本一致性

3. 一致性分类

（二）CAP定理

1.CAP定理介绍

2. CAP三者不可能同时满足论证

3. CAP三者如何权衡

（三）BASE理论

三. 分布式一致性协议

（一）两阶段提交协议(2PC)

1.两阶段提交协议

2.2PC执行流程

...]]></description><category></category></item><item><title><![CDATA[RPC框架设计]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122766475</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122766475</guid><author>enterpc</author><pubDate>Wed, 02 Feb 2022 01:05:05 +0800</pubDate><description><![CDATA[一. Socket回顾与I/0模型

（一）Socket网络编程回顾 

1. Socket概述

Socket，套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议，主要解决数据如何 

在网络中传输，而HTTP是应用层协议，主要解决如何包装数据。Socket是通信的基石，是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示，包含进行网络通信必须的五种信 息：连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。



2]]></description><category></category></item><item><title><![CDATA[Netty核心源码剖析（四）Netty消息出站源码流程分析]]></title><link>https://blog.youkuaiyun.com/enterpc/article/details/122748142</link><guid>https://blog.youkuaiyun.com/enterpc/article/details/122748142</guid><author>enterpc</author><pubDate>Sat, 29 Jan 2022 22:58:12 +0800</pubDate><description><![CDATA[目录

一. 分析入口

二. 出站Handler的write方法执行追踪分析

三. 出站Handler中的flush方法执行追踪分析​

一. 分析入口



上图处打上断点以后，首先Debug启动服务端，



普通方式启动客户端，客户端启动后，程序停在断点处：



接下来我们一直往下跟踪，直到如下图位置：进入pipeline.fireChannelReadComplete()方法继续跟踪：















注意：上图继续跟踪后，程序将跳入我们的 NettyServer...]]></description><category></category></item></channel></rss>