25、事件驱动架构:从消息处理到领域驱动设计

事件驱动架构:从消息处理到领域驱动设计

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值