learn.lianglianglee.com/专栏/消息队列高手课/index.html
2022-08-14 03:40:33 +08:00

209 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>note-submit</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/PDF">PDF</a>
</li>
<li>
<a href="/专栏">专栏</a>
</li>
<li>
<a href="/恋爱必修课">恋爱必修课</a>
</li>
<li>
<a href="/文章">文章</a>
</li>
<li>
<a href="/极客时间">极客时间</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content"
style="max-width: 960px; margin: 0 auto; overflow-x: auto; overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><!--add content-->
<h1>消息队列高手课</h1>
<ul>
<li><a href = '\专栏\消息队列高手课\00 开篇词 优秀的程序员,你的技术栈中不能只有“增删改查”.md.html'>00 开篇词 优秀的程序员,你的技术栈中不能只有“增删改查”</a></li>
<li><a href = '\专栏\消息队列高手课\00 预习 怎样更好地学习这门课?.md.html'>00 预习 怎样更好地学习这门课?</a></li>
<li><a href = '\专栏\消息队列高手课\01 为什么需要消息队列?.md.html'>01 为什么需要消息队列?</a></li>
<li><a href = '\专栏\消息队列高手课\02 该如何选择消息队列?.md.html'>02 该如何选择消息队列?</a></li>
<li><a href = '\专栏\消息队列高手课\03 消息模型:主题和队列有什么区别?.md.html'>03 消息模型:主题和队列有什么区别?</a></li>
<li><a href = '\专栏\消息队列高手课\04 如何利用事务消息实现分布式事务?.md.html'>04 如何利用事务消息实现分布式事务?</a></li>
<li><a href = '\专栏\消息队列高手课\05 如何确保消息不会丢失.md.html'>05 如何确保消息不会丢失</a></li>
<li><a href = '\专栏\消息队列高手课\06 如何处理消费过程中的重复消息?.md.html'>06 如何处理消费过程中的重复消息?</a></li>
<li><a href = '\专栏\消息队列高手课\07 消息积压了该如何处理?.md.html'>07 消息积压了该如何处理?</a></li>
<li><a href = '\专栏\消息队列高手课\08 答疑解惑(一) 网关如何接收服务端的秒杀结果?.md.html'>08 答疑解惑(一) 网关如何接收服务端的秒杀结果?</a></li>
<li><a href = '\专栏\消息队列高手课\09 学习开源代码该如何入手?.md.html'>09 学习开源代码该如何入手?</a></li>
<li><a href = '\专栏\消息队列高手课\10 如何使用异步设计提升系统性能?.md.html'>10 如何使用异步设计提升系统性能?</a></li>
<li><a href = '\专栏\消息队列高手课\11 如何实现高性能的异步网络传输?.md.html'>11 如何实现高性能的异步网络传输?</a></li>
<li><a href = '\专栏\消息队列高手课\12 序列化与反序列化:如何通过网络传输结构化的数据?.md.html'>12 序列化与反序列化:如何通过网络传输结构化的数据?</a></li>
<li><a href = '\专栏\消息队列高手课\13 传输协议:应用程序之间对话的语言.md.html'>13 传输协议:应用程序之间对话的语言</a></li>
<li><a href = '\专栏\消息队列高手课\14 内存管理:如何避免内存溢出和频繁的垃圾回收?.md.html'>14 内存管理:如何避免内存溢出和频繁的垃圾回收?</a></li>
<li><a href = '\专栏\消息队列高手课\15 Kafka如何实现高性能IO.md.html'>15 Kafka如何实现高性能IO</a></li>
<li><a href = '\专栏\消息队列高手课\16 缓存策略如何使用缓存来减少磁盘IO.md.html'>16 缓存策略如何使用缓存来减少磁盘IO</a></li>
<li><a href = '\专栏\消息队列高手课\17 如何正确使用锁保护共享数据,协调异步线程?.md.html'>17 如何正确使用锁保护共享数据,协调异步线程?</a></li>
<li><a href = '\专栏\消息队列高手课\18 如何用硬件同步原语CAS替代锁.md.html'>18 如何用硬件同步原语CAS替代锁</a></li>
<li><a href = '\专栏\消息队列高手课\19 数据压缩:时间换空间的游戏.md.html'>19 数据压缩:时间换空间的游戏</a></li>
<li><a href = '\专栏\消息队列高手课\20 RocketMQ Producer源码分析消息生产的实现过程.md.html'>20 RocketMQ Producer源码分析消息生产的实现过程</a></li>
<li><a href = '\专栏\消息队列高手课\21 Kafka Consumer源码分析消息消费的实现过程.md.html'>21 Kafka Consumer源码分析消息消费的实现过程</a></li>
<li><a href = '\专栏\消息队列高手课\22 Kafka和RocketMQ的消息复制实现的差异点在哪.md.html'>22 Kafka和RocketMQ的消息复制实现的差异点在哪</a></li>
<li><a href = '\专栏\消息队列高手课\23 RocketMQ客户端如何在集群中找到正确的节点.md.html'>23 RocketMQ客户端如何在集群中找到正确的节点</a></li>
<li><a href = '\专栏\消息队列高手课\24 Kafka的协调服务ZooKeeper实现分布式系统的“瑞士军刀”.md.html'>24 Kafka的协调服务ZooKeeper实现分布式系统的“瑞士军刀”</a></li>
<li><a href = '\专栏\消息队列高手课\25 RocketMQ与Kafka中如何实现事务.md.html'>25 RocketMQ与Kafka中如何实现事务</a></li>
<li><a href = '\专栏\消息队列高手课\26 MQTT协议如何支持海量的在线IoT设备.md.html'>26 MQTT协议如何支持海量的在线IoT设备</a></li>
<li><a href = '\专栏\消息队列高手课\27 Pulsar的存储计算分离设计全新的消息队列设计思路.md.html'>27 Pulsar的存储计算分离设计全新的消息队列设计思路</a></li>
<li><a href = '\专栏\消息队列高手课\28 答疑解惑我的100元哪儿去了.md.html'>28 答疑解惑我的100元哪儿去了</a></li>
<li><a href = '\专栏\消息队列高手课\29 流计算与消息通过Flink理解流计算的原理.md.html'>29 流计算与消息通过Flink理解流计算的原理</a></li>
<li><a href = '\专栏\消息队列高手课\30 流计算与消息在流计算中使用Kafka链接计算任务.md.html'>30 流计算与消息在流计算中使用Kafka链接计算任务</a></li>
<li><a href = '\专栏\消息队列高手课\31 动手实现一个简单的RPC框架原理和程序的结构.md.html'>31 动手实现一个简单的RPC框架原理和程序的结构</a></li>
<li><a href = '\专栏\消息队列高手课\32 动手实现一个简单的RPC框架通信与序列化.md.html'>32 动手实现一个简单的RPC框架通信与序列化</a></li>
<li><a href = '\专栏\消息队列高手课\33 动手实现一个简单的RPC框架客户端.md.html'>33 动手实现一个简单的RPC框架客户端</a></li>
<li><a href = '\专栏\消息队列高手课\34 动手实现一个简单的RPC框架服务端.md.html'>34 动手实现一个简单的RPC框架服务端</a></li>
<li><a href = '\专栏\消息队列高手课\35 答疑解惑(三):主流消息队列都是如何存储消息的?.md.html'>35 答疑解惑(三):主流消息队列都是如何存储消息的?</a></li>
<li><a href = '\专栏\消息队列高手课\加餐 JMQ的Broker是如何异步处理消息的.md.html'>加餐 JMQ的Broker是如何异步处理消息的</a></li>
<li><a href = '\专栏\消息队列高手课\结束语 程序员如何构建知识体系?.md.html'>结束语 程序员如何构建知识体系?</a></li>
</ul>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194"
integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw=="
data-cf-beacon='{"rayId":"70996b2f083d3d60","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}'
crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>