事件驱动架构:从消息处理到领域驱动设计
1. 消息处理基础
1.1 队列消息处理
在客户端,我们会创建队列实例,然后使用所需参数和回调函数调用 StartConsuming 方法。回调方法会对从队列中检索到的每条消息执行。由于可能每 100 毫秒返回一批 10 条消息,该方法可能会被快速连续调用,且每次执行都在自己的 goroutine 中运行。在编写实现时,需要考虑这个细节。例如,处理消息并写入数据库时,数据库连接数量并非无限。为确定合适的批量大小,需要进行初始测试并持续监控,以便调整应用程序以实现最佳性能。这些设置应作为参数实现,以便在硬件扩展时轻松更改。
1.2 推送消息
有时,我们希望服务能立即对事件做出反应,而不是使用队列。服务可以订阅来自 NATS.io 或 SNS 等代理的消息。当代理收到来自另一个服务的消息时,会通过调用注册的端点并发送消息副本,通知所有注册的服务。接收方通常在收到消息后会断开连接,并假定消息处理正确。这种模式使消息代理具有极高的吞吐量,例如 NATS.io 的单个服务器实例每秒可以传递数百万条消息。如果客户端无法处理消息,则必须处理管理此故障的逻辑,例如向代理发送通知或将消息添加到死信队列以便稍后重新播放。
2. 使用 NATS.io 作为消息代理
2.1 发布消息到 NATS.io
以下是使用 NATS.io 作为消息代理的示例代码:
func main() {
var err error
natsClient, err := na
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



