快乐冲浪与生活

多体验、多体会、多体悟

0%

RocketMQ 按发送方式、消费顺序、投递时机、事务语义划分出最常用 5 类消息:同步消息、异步消息、顺序消息、延时消息、事务消息。

  1. 同步消息:发送方发消息后阻塞等待 Broker 返回结果,成功 / 失败立即感知,适合强可靠性、不能丢消息的业务;
  2. 异步消息:发送方发消息不阻塞,通过回调函数接收结果,吞吐量更高,适合高吞吐、允许异步感知发送结果场景;
  3. 顺序消息:保证同一分组内消息按发送顺序被消费,分全局顺序 / 分区顺序;牺牲部分并发,适合有先后依赖的业务;
  4. 延时消息:消息发送后不会立刻投递,等待指定时长才对消费者可见,不支持任意时间戳,只能选预设级别;
  5. 事务消息:实现分布式事务(半消息 + 确认 / 回查机制),保证本地事务和消息发送原子性,要么本地事务成功 + 消息可见,要么都不生效。

同步消息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# main4.py
from rocketmq.client import Producer, Message

namesrv_addr = "namesrv:9876"
topic = "test_topic"
tag = "test_tag"

producer = Producer("test_producer")
producer.set_name_server_address(namesrv_addr)
producer.start()
print("Producer 进程已启动,开始发送", flush=True)

message = Message(topic)
message.set_tags(tag)
message.set_body("test_body".encode("utf-8"))
send_result = producer.send_sync(message)

print(f"发送成功 msgId: {send_result.msg_id}, status: {send_result.status}, offset: {send_result.offset}", flush=True)

producer.send_sync(message) 用于发送同步消息,返回 SendResult 对象,包含消息 ID、状态、偏移量等信息。

为什么需要 NameServer

没有 NameServer 时,生产者 / 消费者必须写死 Broker 的 IP 和端口。一旦遇到下面任何一种情况,所有客户端都得改配置、重启:

  • Broker 扩容(新增节点);
  • Broker 宕机或换机器(IP 变了);
  • 主从切换、集群拓扑调整。

在分布式系统里,这种客户端直连、地址硬编码的方式完全不可维护。因此需要一层路由注册中心来解耦:客户端不必知道 Broker 在哪,只要知道去哪查路由即可。

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。注意 “bca” 和 “cab” 也是正确答案。

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

给定一个整数数组 nums 和一个整数目标值target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

起因是今天在开发过程中需要将 PG 的查询结果输出到文件,方便后续分析。 问题已经解决,使用的 \copy 命令,然后跟 Buddy 也沟通了下,它还列举了其他一些方法,所以在这篇文章中做个小结。 本文内容大部分由 Buddy 生成,本人则对脚本、结论进行验证,已确认有效。

本文为可视化系列第 02 篇,将介绍柱状图的基础概念、适用场景与数据集选取,并分别使用 Python Matplotlib 和 R ggplot2 两套工具,演示绘制同一幅柱状图。

柱状图

柱状图,也叫条形图,是最常用的数据可视化图表之一,用矩形柱子的高度(垂直柱状图)或长度(水平柱状图)代表数值大小,用来对比不同类别数据。