Golang 下的微服务 - 第 5 部分 - Go Micro 的事件代理

在本系列的,我们谈到了用户认证和 JWT。在这一部分中,我们将快速浏览 go-micro 的代理功能。

正如前面的文章提到的,go-micro 是一个可插拔的框架,它连接了许多不同的常用技术。如果你看看,你会看到它支持多少插件。

在我们的例子中,我们将使用 NATS 代理插件。

基于事件驱动的架构

gRPCgo.srv.user-servicego.srv.user-service
x 刚刚发生了gRPC

现在,客户端服务只需要简单的监听事件。这意味着,你需要中间的介质来接收这些事件,并通知订阅了事件的客户端。

这篇文章中,我们将在每次创建用户时创建一个事件,并且将创建一个用于发送电子邮件的新服务。我们不会真的去实现发邮件的功能,只是模拟它。

代码

首先,我们需要将 NATS 代理插件集成到我们的用户服务中:

现在让我们在创建新用户时发布事件()

确保你正在运行 Postgres,然后让我们运行这个服务:

现在我们创建我们的电子邮件服务。 我为此创建了一个:

在运行之前,我们需要启动 ...

另外,我想快速解释一下 go-micro 的一部分,我觉得这对于理解它作为框架如何工作很重要。你会注意到:

srv.Init()srv.Server().Options()
GO_MICRO_BROKERNATS
cmd.Init()github.com/micro/go-micro/cmd
$ make build && make runshippy-user-cli$ make run2017/12/26 23:57:23 Sending email to: Ewan Valentine
user.created

值得一提的是,使用 JSON over NATS 会比 gRPC 带来更高的性能开销,因为我们已经回到串行化json字符串的领域。但是,对于某些使用情况,这是完全可以接受的。 NATS 非常高效,非常适合消息最多交付一次的事件(fire and forget 有消息最多交付一次的意思,这个可以帮助做更深入的理解)。

MICRO_BROKER=natsMICRO_BROKER=googlepubsub_ "github.com/micro/go-plugins/broker/nats"_ "github.com/micro/go-plugins/broker/googlepubsub"

如果你不使用 go-micro,那么有一个 (NATS 是用 go 写的,所以对 Go 的支持非常稳固)。

发布一个事件:

订阅一个事件:

我之前提到过,在使用第三方消息代理(如 NATS)时,会失去对 protobuf 的使用。这是一种耻辱,因为我们失去了使用二进制流进行通信的能力,这当然比串行化的 JSON 字符串的开销要低得多。 但是,像大多数人所关心的那样,go-micro 也可以解决这个问题。

内置 go-micro 是 pubsub 层,位于代理层之上,但不需要第三方代理(如 NATS)。 但是这个功能真正棒的部分在于它利用了 protobuf 的定义。 所以我们回到了低延迟二进制流的领域。 因此,让我们更新我们的用户服务,用 go-micro 的 pubsub 替换现有的 NATS 代理:

现在我们的邮件服务是这样的:

现在我们在我们的服务中使用我们的底层 User protobuf 定义,通过 gRPC,并且不使用第三方代理。太棒了!

这是一个包装! 接下来的教程我们将着眼于为我们的服务创建一个用户界面,并研究 Web 客户端如何开始与我们的服务进行交互。

本文中的任何错误、反馈,或任何您会发现有用的东西,请给我发。


via:

译者:

校对:

本文由 原创编译, 荣誉推出

想了解更过go相关讯息请搜索并关注微信公众号:【Go语言中文网】谢谢大家的支持~~