使用 Golang 中的 Log Events 和 RabbitMQ 进行事件驱动设计

WBOY
发布: 2024-07-23 11:30:32
原创
863 人浏览过

随着团队追求更具适应性、可扩展性和敏捷性的解决方案来满足当代应用程序的要求,事件驱动架构的采用正在兴起。事件驱动架构通过标准化和结构化事件实现通信,支持实时更新并简化不同系统之间的集成。

Event-driven design with Log Events and RabbitMQ in Golang在之前的博文中,我讨论了 Auth0 中的 webhook 如何传输事件,从而利用这些事件来启动逻辑执行。在这篇文章中,我将深入研究该架构的技术方面,并演示如何利用 Go (Golang) 来构建这样的系统。

主要成分:

让我们首先看一下驱动这个系统的主要组件。

记录事件:

Auth0 具有与租户级别的每个活动相关的日志事件。这些事件可用于监控或审计目的。每个活动的代码可以在这里查看

网络钩子:

我们使用 auth0 webhooks 将过滤后的事件传递给我们的生产者。我们过滤这些事件,因为我们只对少数事件感兴趣。

RabbitMQ

RabbitMQ 支持多种消息传递协议,我们用来路由消息的协议是高级消息传递队列协议(AMQP)。 AMQP 具有三个主要实体 – 队列、交换器和绑定。

幕后花絮

当 Auth0 中触发事件时,它会立即通过 webhook 发送给我们的发布者,然后发布者根据事件类型发布它。一旦发布,该事件就会进入交易所。交换器将消息定向到连接的队列,消费者在那里接收消息。为了实现这一过程,我们建立了一个渠道。该通道允许我们发布消息进行交换并声明订阅队列。

为了创建一个新队列,我们利用通道上的包提供的 QueueDeclare 函数,指定我们所需的队列属性。创建队列后,我们可以使用通道的 Publish 功能来发送消息。

接下来,我们创建一个连接到 RabbitMQ 的消费者并建立通信通道。使用这个通道,我们可以使用为其定义的 Consume 方法来消费消息。

基础工作

我们使用 golang-auth0 管理包来处理日志事件,对于队列操作,我们使用 github.com/rabbitmq/amqp091-go。

以下是片段:

出版:

日志的详细结构可以在这里找到

雷雷

交换:

雷雷
消费:

雷雷

因此,通过利用 Auth0 中的 webhook 来触发事件并使用 RabbitMQ 进行可靠的消息排队和传递,我们可以构建可扩展且响应迅速的应用程序。这种方法不仅增强了灵活性,而且支持无缝事件处理,从而能够高效处理异步操作。

我希望这篇文章对您有所帮助,并且能够对您的事件驱动之旅有所帮助。

快乐编码:)

以上是使用 Golang 中的 Log Events 和 RabbitMQ 进行事件驱动设计的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!