go操作各大消息队列教程(rabbitmq、kafka)_go 消息队列-csdn博客


本站和网页 https://blog.csdn.net/weixin_45565886/article/details/132140764 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Go操作各大消息队列教程(RabbitMQ、Kafka)_go 消息队列-CSDN博客
Go操作各大消息队列教程(RabbitMQ、Kafka)
最新推荐文章于 2024-04-12 23:56:12 发布
NPE~ 阅读量2k 收藏 2 点赞数 分类专栏: go 文章标签: kafka 消息队列 RabbitMQ
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/weixin_45565886/article/details/132140764
版权
专栏收录该内容
45 篇文章
7 订阅
订阅专栏
Go操作各大消息队列教程
1 RabbitMQ
1.1 概念
①基本名词
当前市面上mq的产品很多,比如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和阿里巴巴捐献给Apache的RocketMQ。甚至连redis这种NoSQL都支持MQ的功能。
Broker:表示消息队列服务实体
Virtual Host:虚拟主机。标识一批交换机、消息队列和相关对象。vhost是AMQP概念的基础,必须在链接时指定,RabbitMQ默认的vhost是 /。
AMQP(Advanced Message Queuing Protocol)高级消息队列协议
Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。
②常见模式
1. simple简单模式
消息的消费者(consumer) 监听(while) 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失)
2. worker工作模式
多个消费者从一个队列中争抢消息
(隐患,高并发情况下,默认会产生某一个消息被多个消费者共同使用,可以设置一个开关(syncronize,与同步锁的性能不一样) 保证一条消息只能被一个消费者使用)
应用场景:红包;大项目中的资源调度(任务分配系统不需知道哪一个任务执行系统在空闲,直接将任务扔到消息队列中,空闲的系统自动争抢)
3. publish/subscribe发布订阅(共享资源)
消费者订阅消息,然后从订阅的队列中获取消息进行消费。
X代表交换机rabbitMQ内部组件,erlang 消息产生者是代码完成,代码的执行效率不高,消息产生者将消息放入交换机,交换机发布订阅把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费
相关场景:邮件群发,群聊天,广播(广告)
4. routing路由模式
交换机根据路由规则,将消息路由到不同的队列中
消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;
5. topic主题模式(路由模式的一种)
星号井号代表通配符
星号代表多个单词,井号代表一个单词
路由功能添加模糊匹配
消息产生者产生消息,把消息交给交换机
交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费
1.2 搭建(docker方式)
①拉取镜像
# 拉取镜像
docker
pull rabbitmq:3.7-management
②创建并启动容器
# 创建并运行容器
run
-d
--name
myrabbitmq
-p
5672
:5672
15672
:15672 rabbitmq:3.7-management
#5672是项目中连接rabbitmq的端口(我这里映射的是5672),15672是rabbitmq的web管理界面端口(我映射为15672)
# 输入网址http://ip:15672即可进入rabbitmq的web管理页面,账户密码:guest / guest
③web界面创建用户和virtual host
下面为了我们后续的操作,首先我们新建一个Virtual Host并且给他分配一个用户名,用来隔离数据,根据自己需要自行创建
新增virtual host
新增用户
点击新建好的用户,设置其host
最终效果
1.3 代码操作
①RabbitMQ struct:包含创建、消费、生产消息
package
import
"fmt"
"github.com/streadway/amqp"
"log"
//amqp:// 账号 密码@地址:端口号/vhost
const
MQURL
=
"amqp://ziyi:ziyi@10.253.50.145:5672/ziyi"
type
struct
//连接
conn
amqp
Connection
//管道
channel
Channel
//队列名称
QueueName
string
//交换机
Exchange
//key Simple模式 几乎用不到
Key
//连接信息
Mqurl
//创建RabbitMQ结构体实例
func
NewRabbitMQ
queuename
exchange
key
rabbitmq
:=
&
var
err
error
//创建rabbitmq连接
Dial
failOnErr
"创建连接错误!"
"获取channel失败"
return
//断开channel和connection
Destory
Close
//错误处理函数
message
if
!=
nil
log
Fatalf
"%s:%s"
panic
fmt
Sprintf
//简单模式step:1。创建简单模式下RabbitMQ实例
NewRabbitMQSimple
queueName
""
//订阅模式创建rabbitmq实例
NewRabbitMQPubSub
exchangeName
//创建rabbitmq实例
//获取connection
"failed to connecct rabbitmq!"
//获取channel
"failed to open a channel!"
//订阅模式生成
PublishPub
//尝试创建交换机,不存在创建
ExchangeDeclare
//交换机名称
//交换机类型 广播类型
"fanout"
//是否持久化
true
//是否字段删除
false
//true表示这个exchange不可以被client用来推送消息,仅用来进行exchange和exchange之间的绑定
//是否阻塞 true表示要等待服务器的响应
"failed to declare an excha"
+
"nge"
//2 发送消息
Publish
Publishing
//类型
ContentType
"text/plain"
//消息
Body
byte
//订阅模式消费端代码
RecieveSub
//2试探性创建队列,创建队列
QueueDeclare
//随机生产队列名称
"Failed to declare a queue"
//绑定队列到exchange中
QueueBind
Name
//在pub/sub模式下,这里的key要为空
//消费消息
Consume
forever
make
chan
bool
for
range
Printf
"Received a message:%s,"
Println
"退出请按 Ctrl+C"
<-
//话题模式 创建RabbitMQ实例
NewRabbitMQTopic
exchagne
routingKey
"failed
to connect rabbingmq!"
"failed to open a channel"
//话题模式发送信息
PublishTopic
//交换机类型 话题模式
"topic"
"topic failed to declare an excha"
//2发送信息
//要设置
//话题模式接收信息
//要注意key
//其中* 用于匹配一个单词,#用于匹配多个单词(可以是零个)
//匹配 表示匹配imooc.* 表示匹配imooc.hello,但是imooc.hello.one需要用imooc.#才能匹配到
RecieveTopic
"failed to declare an exchange"
//路由模式 创建RabbitMQ实例
NewRabbitMQRouting
//路由模式发送信息
PublishRouting
"direct"
//发送信息
//路由模式接收信息
RecieveRouting
//简单模式Step:2、简单模式下生产代码
PublishSimple
//1、申请队列,如果队列存在就跳过,不存在创建
//优点:保证队列存在,消息能发送到队列中
//是否为自动删除 当最后一个消费者断开连接之后,是否把消息从队列中删除
//是否具有排他性 true表示自己可见 其他用户不能访问
//额外数据
//2.发送消息到队列中
//默认的Exchange交换机是default,类型是direct直接类型
//要赋值的队列名称
//如果为true,根据exchange类型和routkey规则,如果无法找到符合条件的队列那么会把发送的消息返回给发送者
//如果为true,当exchange发送消息到队列后发现队列上没有绑定消费者,则会把消息还给发送者
ConsumeSimple
//是否具有排他性
//是否阻塞
//接收消息
msgs
//用来区分多个消费者
//是否自动应答
//如果设置为true,表示不能同一个connection中发送的消息传递给这个connection中的消费者
//队列是否阻塞
//启用协程处理
//实现我们要处理的逻辑函数
"Received a message:%s"
//fmt.Println(d.Body)
"【*】warting for messages, To exit press CCTRAL+C"
ConsumeWorker
consumerName
"%s Received a message:%s"
②测试代码
consumer.go
main
//消费者
"ziyiSimple"
producer.go
//Simple模式 生产者
<
++
time
Sleep
Second
"%s %d"
"hello"
2. worker模式
/*
worker模式无非就是多个消费者去同一个队列中消费消息
*/
//消费者1
rabbitmq1
"ziyiWorker"
"consumer1"
//消费者2
rabbitmq2
"consumer2"
//Worker模式 生产者
100
//time.Sleep(time.Second * 2)
3. publish/subscribe模式
consumer.go:
"newProduct"
//订阅模式发送者
<=
20
"订阅模式生产第"
strconv
Itoa
"条数据"
4. router模式
"exZi"
"imooc_one"
//路由模式生产者
imoocOne
imoocTwo
"imooc_two"
10
"hello imooc one!"
"hello imooc two!"
5. topic模式
//Topic消费者
//rabbitmq := RabbitMQ.NewRabbitMQTopic("exImoocTopic", "#") //匹配所有的key:topic88和topic99
"exImoocTopic"
"imooc.topic88.three"
//只匹配topic88的
//Topic模式生产者
"imooc.topic99.four"
"hello imooc topic three!"
"hello imooc topic four!"
2 Kafka
2.1 基本概念
Kafka是分布式的,其所有的构件borker(server服务端集群)、producer(消息生产)、consumer(消息消费者)都可以是分布式的。
producer给broker发送数据,这些消息会存到kafka server里,然后consumer再向kafka server发起请求去消费这些数据。
kafka server在这个过程中像是一个帮你保管数据的中间商。所以kafka服务器也可以叫做broker(broker直接翻译可以是中间人或者经纪人的意思)。
在消息的生产时可以使用一个标识topic来区分,且可以进行分区;每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。
同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。
消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡
参考:https://blog.csdn.net/lingfy1234/article/details/122900348
应用场景
监控
流处理
日志聚合
持久性日志
基础概念
topic:话题
broker:kafka服务集群,已发布的消息保存在一组服务器中,称之为kafka集群。集群中的每一个服务器都是一个代理(broker)
partition:分区,topic物理上的分组
message:消息,每个producer可以向一个topic主题发布一些消息
1.⽣产者从Kafka集群获取分区leader信息
2.⽣产者将消息发送给leader
3.leader将消息写入本地磁盘
4.follower从leader拉取消息数据
5.follower将消息写入本地磁盘后向leader发送ACK
6.leader收到所有的follower的ACK之后向生产者发送ACK
2.2 常见模式
①点对点模式:火车站出租车抢客
发送者将消息发送到消息队列中,消费者去消费,如果消费者有多个,他们会竞争地消费,也就是说对于某一条消息,只有一个消费者能“抢“到它。类似于火车站门口的出租车抢客的场景。
②发布订阅模式:组间无竞争,组内有竞争
消费者订阅对应的topic(主题),只有订阅了对应topic消费者的才会接收到消息。
例如:
牛奶有很多种,光明牛奶,希望牛奶等,只有你订阅了光明牛奶,送奶工才会把光明牛奶送到对应位置,你也才会有机会消费这个牛奶
注意
:为了提高消费者的消费能力,kafka中引入了消费者组的概念。相当于是:不同消费者组之间因为订阅的topic不同,不会有竞争关系。但是消费者组内是有竞争关系。
成都、厦门的出租车司机分别组成各自的消费者组。
成都的出租车司机只拉成都的人,厦门的只拉厦门的人。(因此他们两个消费者组不是竞争关系)
成都市内的出租车司机之间是竞争关系。(消费者组内是竞争关系)
2.3 docker-compose部署
vim
docker-compose.yml
version
'3'
services
zookeeper
image
confluentinc/cp
6.2.0
ports
"2181:2181"
environment
ZOOKEEPER_CLIENT_PORT
2181
ZOOKEEPER_TICK_TIME
2000
"9092:9092"
KAFKA_ZOOKEEPER_CONNECT
#KAFKA_ADVERTISED_LISTENERS后面改为自己本地宿主机的ip,例如我本地mac的ip为192.168.0.101
KAFKA_ADVERTISED_LISTENERS
PLAINTEXT
//192.168.0.101
9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
depends_on
# 进入到docker-compose.yml所在目录,执行下面命令
docker-compose
up
# 查看部署结果,状态为up表明部署成功
ps
2.4 代码操作
# 1. 创建对应topic
exec
kafka kafka-topics
--create
--topic
test-topic
--partitions
--replication-factor
--bootstrap-server
192.168
.0.101:9092
# 2. 查看topic列表
--list
--zookeeper
zookeeper:2181
①producer.go
"github.com/IBM/sarama"
// 基于sarama第三方库开发的kafka client
config
sarama
NewConfig
Producer
RequiredAcks
WaitForAll
// 发送完数据需要leader和follow都确认
Partitioner
NewRandomPartitioner
// 新选出一个partition
Return
Successes
// 成功交付的消息将在success channel返回
// 构造一个消息
msg
ProducerMessage
Topic
"web_log"
Value
StringEncoder
"this is a test log"
// 连接kafka
client
NewSyncProducer
"localhost:9092"
"producer closed, err:"
defer
// 发送消息
pid
offset
SendMessage
"send msg failed, err:"
"pid:%v offset:%v\n"
②consumer.go
// kafka consumer
consumer
NewConsumer
"fail to start consumer, err:%v\n"
partitionList
Partitions
// 根据topic取到所有的分区
"fail to get list of partition:err%v\n"
partition
// 遍历所有的分区
// 针对每个分区创建一个对应的分区消费者
pc
ConsumePartition
int32
OffsetNewest
"failed to start consumer for partition %d,err:%v\n"
AsyncClose
// 异步从每个分区消费信息
PartitionConsumer
Messages
"Partition:%d Offset:%d Key:%v Value:%v"
Partition
Offset
//演示时使用
select
③运行效果
优惠劵
关注
点赞
觉得还不错?
一键收藏
知道了
评论
复制链接
扫一扫
专栏目录
Go-GoQ在Golang中的轻量级
08-14
GoQ 在Golang中的轻量级
zeromq的go语言测试实例包
03-28
zeromq的go语言测试实例包,为学习安装部署zeromq的同学提供,注意该安装包中的测试实例为go语言版本,要根据各位安装的zeromq版本下载。
1 条评论
您还未登录,请先
登录
后发表或查看评论
Go
操作
qq_50512645的博客
02-25
342
实际开发中同步通信用于对数据的的完整性和准确性有要求的场景。例如发送请求等待服务器响应、客户端与数据库之间的交互等。用户认证和授权:当用户登录系统时,通常需要与认证服务进行通信以验证用户的身份,并获取用户的权限信息。这个过程中需要确保用户的身份和权限信息是准确的,因此适合使用同步通信模式。订单处理:在电子商务系统中,当用户下单时,通常需要与库存服务进行通信以检查商品的库存情况,以及与支付服务进行通信以完成支付流程。这些
需要确保订单信息的准确性和支付的完成,因此适合使用同步通信模式。数据查询和处理:在企业
amqp:用于Go的AMQP 1.0客户端库
02-03
pack.ag/amqp
pack.ag/amqp是Go的AMQP 1.0客户端实现。
注意:该项目不再处于积极开发中。 有关详细信息,请参见 。
与AMQP 0-9-1或0-10不兼容,后者是当今最常用的AMQP协议。 可以在上找到AMQP 1.0代理和其他AMQP 1.0资源的。
该库旨在稳定并值得生产使用,但API仍可能会发生变化。 为了符合SemVer,在API保持稳定之前,主版本将保持为0。 在此期间,将通过击打次要版本来指示重大更改。 进行不间断的更改会增加补丁程序的版本。
安装
go get -u pack.ag/amqp
贡献
欢迎捐款! 请参阅 。
用法示例
package main
import (
"context"
"fmt"
"log"
"time"
"pack.ag/amqp"
func main () {
// Create client
client , err := amqp . Dial ( "amqps://my-namespace.servicebus.windows.net" ,
amqp . ConnSASLPl
详解Python
服务器
的远程结果返回
12-23
先说一下笔者这里的测试环境:Ubuntu14.04 + Python 2.7.4
sudo apt-get install
-server
Python使用
需要Pika库
sudo pip install pika
远程结果返回
消息发送端发送消息出去后没有结果返回。如果只是单纯发送消息,当然没有问题了,但是在实际中,常常会需要接收端将收到的消息进行处理之后,返回给发送端。
处理方法描述:发送端在发送信息前,产生一个接收消息的临时队列,该队列用来接收返回的结果。其实在这里接收端、发送端的概念已经比较模糊了,因为发送端也同样要接收消息
golang实现redis的延时
功能示例
01-03
前言
在学习过程中发现redis的zset还可以用来实现轻量级的延时
功能,虽然可靠性还有待提高,但是对于一些对数据可靠性要求不那么高的功能要求完全可以实现。本次主要采用了redis中zset中的zadd, zrangebyscore 和 zdel来实现一个小demo。
提前准备 安装redis, redis-go
因为用的是macOS, 直接
$ brew install redis
$ go get github.com/garyburd/redigo/redis
又因为比较懒,生成任务的唯一id时,直接采用了bson中的objectId,所以:
$ go get gopkg.
go 使用NSQ(
General_zy的博客
04-10
1445
它们消耗的资源很少,可以与其他服务共存。每个channel都会收到topic所有消息的副本,实际上下游的服务是通过对应的channel来消费topic消息。总而言之,消息是从topic -> channel(每个channel接收该topic的所有消息的副本)多播的,但是从channel -> consumers均匀分布(每个消费者接收该channel的一部分消息)。流量削峰:类似秒杀(大秒)等场景下,某一时间可能会产生大量的请求,使用
能够为后端处理请求提供一定的缓冲区,保证后端服务的稳定性。
golang之
weixin_50134791的博客
10-19
5849
之前我写过一篇关于rocketmq的文章,因为
的使用更广泛,所以写一篇关于
,及go如何
的笔记。
的作用:
异步,将同步的消息变为异步
解耦,将单体服务拆分多个微服务,实现了分布式部署,单个服务的修改、增加或删除,不影响其他服务,不需要全部服务关闭重启
抗压,由于是异步,解耦的,高并发请求到来时,我们不直接发送给服务,而是发给MQ,让服务决定什么时候接收消息,提供服务,这样就缓解了服务的压力
图示:
用户注册后发邮件和虚拟币:
异步解耦图:
抗压
go实现
CY2333333的博客
04-29
3170
使用Golang实现一个
,具体要满足以下功能:
可以向
发送消息和拉取消息
发送的消息不能超过指定的容量
拉取消息支持拉取指定数量的消息,如果不满足指定的数量,等待超时以后返回超时时间内拉取的所有消息(不会超过指定的数量)
使用Golang中的基本数据结构和功能来实现
// MessageQueue define the interface for the messag
GO学习之
Kafka
qq_19283249的博客
09-03
883
是由 Apache 软件基金会开发和维护的开源的、分布式的
系统,用于高吞吐量、持久性的消息传递。主要用于实时数据处理,可以处理海量的数据流,并将数据流可靠地传递给多个消费者应用程序。
首先用 ``sarama.NewConfig()`` 来创建一个 config 配置实体,然后通过 sarama.NewSyncProducer() 来创建一个生产者,用 &sarama.ProducerMessage{} 生成一个消息,通过 producer.SendMessage(message)。
Go 学习笔记(57)— Go 第三方库之 amqp (
生产者、消费者整个流程)
wohu1104的专栏
09-14
5188
1. 安装
的 golang 包
golang 可使用库 github.com/streadway/amqp
。使用下面命令安装
go get -v github.com/streadway/amqp
2. 生产者流程
在 Golang 中创建
生产者基本步骤是:
连接 Connection
创建 Channel
创建或连接一个交换器
创建或连接一个队列
交换器绑定队列
投递消息
关闭 Channel
关闭 Connec
go实现redis
07-30
使用go实现的redis的
,支持并发队列;支持Topic,Group注册队列监听消息;支持队列消息异常监听重启恢复;
Go语言版本
库:simple、worker、Fanout 模型、Direct 模型、Topic模型
07-29
库:simple、worker、Fanout 模型、Direct 模型、Topic模型。
是使用Erlang编写的一个开源的
,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。
是一个消息代理:它接受和转发消息。 你可以把它想象成一个邮局:当你把邮件放在邮箱里时,你可以确定邮差先生最终会把邮件发送给你的收件人。 在这个比喻中,
是邮政信箱,邮局和邮递员。
与邮局的主要区别是它不处理纸张,而是接受,存储和转发数据消息的二进制数据块。
利用Python
的方法
教程
01-20
是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Message Queue,
(MQ)是一种应用...
无疑是目前最流行的
之一,对各种语言环
38 3 ActiveMQ
RokcetMQ
实战
中间件视频
08-07
ActiveMQ
09-15
MCB134的博客
04-12
670
主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 too many connection 错误,引发雪崩效应。我们使用
,通过异步处理请求,从而缓解系统的压力。
常应用于异步处理,流量削峰,应用解耦,消息通讯等场景。
是一个分布式的基于发布/订阅模式的
(MQ,Message Queue),主要应用于大数据实时处理领域。
部署
YUEAwb的博客
227
可见上篇文章,接着做就行(部署所有集群服务器)
分布式技术---------------
中间件之
最新发布
zzzxxx520369的博客
665
当前比较常见的 MQ 中间件有 ActiveMQ、
、RocketMQ、
等。
(MQ,Message Queue),主要应用于大数据实时处理领域
是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper 协调的分布式消息中间件系统它的最大的特性就是可以实时的处理大量数据以满足各种需求场景。
golang
06-09
Golang 有多种
可供选择,其中比较流行的有以下几种:
1.
是一款开源的 AMQP
系统,支持多种编程语言,包括 Golang。它提供了高可用性、可靠性和可扩展性,适合于处理大量消息和实时数据。
2.
是一个分布式的流处理平台,也是一个高吞吐量分布式消息系统。它可以处理大量的消息,并提供了持久化和可扩展性等优点。
3. NSQ:NSQ 是一个实时分布式消息系统,具有高可用性和可伸缩性。它可以处理高并发量的消息,同时支持负载均衡和故障恢复等功能。
4. NATS:NATS 是一个高性能、轻量级的消息系统,适合于处理大量的消息和实时数据。它提供了基于主题的发布/订阅模式和点对点模式,支持多种编程语言,包括 Golang。
以上这些
都可以在 Golang 中使用,具体选择哪种取决于你的需求和场景。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄5年
暂无认证
323
原创
8649
周排名
6018
总排名
62万+
访问
等级
4487
积分
799
粉丝
1003
获赞
173
3931
私信
热门文章
Idea中解决Git冲突问题及merge代码消失问题【git常用tips】
24414
Http状态码502常见原因及排错思路(实战)
23155
Kali常见攻击手段
22045
前端与后端传递数据 — — JSON
20293
DevOps概念及搭建全过程(Jenkins、Harbor、SonarQube、K8s)
17789
分类专栏
demo
47篇
其他
18篇
生产问题+场景题
9篇
45篇
框架
41篇
面试
8篇
template
17篇
bug
29篇
数据库
work
1篇
计算网络
3篇
Matrix
7篇
python
理论
22篇
快捷键
云原生
4篇
future
实习
21篇
算法与数据结构
36篇
resume
LeetCode
12篇
后端bug
Java
微信
5篇
code
源码
最新评论
Win10添加、删除鼠标右击的选项(快捷方法)
COLD758:
感谢!很有用!
git rebase与git merge图文详解(一文看懂区别)
许忆:
讲的很通俗易懂
,解决了很久以来的疑惑
GO语言韩顺平核心编程完整版笔记下载
August9904:
谢谢好人了
Golang线上内存爆掉问题排查(pprof)
CSDN-Ada助手:
恭喜你这篇博客进入【CSDN每天值得看】榜单,全部的排名请看 https://bbs.csdn.net/topics/618346349。
K8s全套快速入门
天蓝999:
可以的,我看的另一篇,从零搭建Docker和K8S,部署SpringBoot和SpringCloud:https://knife.blog.csdn.net/article/details/137017554
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
支付系统核心逻辑 — — 状态机(Java&Golang版本)
Golang开发2D小游戏全套教程(已完结)
磁盘压力测试工具(vdbench&fio)
2024年
34篇
2023年
138篇
2022年
153篇
2021年
目录
评论 
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值