使用 AMQP 和 Vert.x 实现微服务间的异步通信

Posted OSC开源社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 AMQP 和 Vert.x 实现微服务间的异步通信相关的知识,希望对你有一定的参考价值。


协作翻译

原文:Asynchronous communication between microservices using AMQP and Vert.x

链接:

https://developers.redhat.com/blog/2018/08/30/microservices-async-communications-amqp-vertx/

译者:子影, 硅谷课堂, ZICK_ZEON, Tocy, 雪落无痕xdj


微服务是大多数新型现代软件解决方案中的首选架构。它们(大多数)被设计成去做一件事,它们必须相互协作去完成业务用例。微服务之间的所有通信都是通过网络呼叫进行的;这种模式避免了服务之间的紧耦合而且提供了更好的模块分离。


这里基本上有两种通信方式:同步和异步。正确应用这两个方式是请求-回复和事件驱动模式的基础。在请求-回复模式中,客户端初始化一个请求,并且通常同步等待回复。然而,有些情况下,客户端可以不等待并向另一方注册回调,这是异步方式的请求-回复模式的一个例子。


本文中,我会通过基于高级消息队列协议(AMQP)的两个微服务之间的通信来展示异步方式的请求-回复过程。AMQP是应用程序或组织之间传递业务消息的开放标准。虽然本文的重点在于介绍请求-回复模式,但是同样的代码也可用于开发其它情况,比如事件风暴。使用异步模型通信对于实现聚合模式是非常有益的。


我会使用Apache QPid Proton(或Red Hat AMQ Interconnect)作为消息路由器和使用Vert.x AMQP桥接器,用于两种服务之间的通信。


解决方案组件


演示有三个部分:


1.前端:这是一个用Java编写的服务,此服务提供了一个HTTP端点来接收来自客户端的调用。收到请求后,前端服务将调用指令发送到QPid路由器并注册应答处理程序。当响应可用时,Vert.x AMQP桥将调用回复处理程序。代码库中的前端文件夹托管此项目。


2.QPid路由器:前端进程执行调用并发布一条消息给QPid队列。Vert.x自动负责添加correlationId作为message属性,以识别对原始请求的响应。


3.后端:后端组件侦听来自QPid路由器的呼叫中的消息,处理它(例如,在数据库中进行计算或持久化),并将响应发送回QPid路由器。然后,QPid路由器将通过响应通知前端组件。代码库中的后端文件夹托管此项目。


消息流


1.跨不同组件的消息的基本流程如下。可在此处找到此流程的完整详细信息以及相关标头。


2.前端服务将向QPid服务器发送消息并提供回复处理程序。Vert.x自动填充请求 - 回复通信所需的标头。


3.接收后端服务应用程序,处理该消息并将回复发送回QPid服务器。Vert.x填充请求 - 回复通信所需的标头。


QPid服务器将回复消息分派给前端服务的回复处理程序。Vert.x网桥自动处理回复处理程序的调用。


如何运行示例:快速开始


通过发出以下命令,您可以使用Docker Compose文件来运行本例的所有三个组件:


使用 AMQP 和 Vert.x 实现微服务间的异步通信


如何运行示例: 困难的方式


本节概述如何单独运行每个组件。你需要下面的软件在你的笔记本电脑上运行它们。


  1. Docker (执行Apache Qpid路由器)

  2. Open JDK 8 (要编译前端和后端服务组件)

  3. Maven 3.2 (两个服务都使用Maven)

  4. Vegeta 作为HTPP客户端(或者您可以使用您最喜欢的工具)


执行


  • 使用下面的命令启动本地的QPid路由器:


使用 AMQP 和 Vert.x 实现微服务间的异步通信


  • 编译并执行前端服务:


使用 AMQP 和 Vert.x 实现微服务间的异步通信


  • 编译并执行后端服务:


使用 AMQP 和 Vert.x 实现微服务间的异步通信


测试


Vegeta是一种用于HTTP负载测试的开源工具,可用于将请求发布到前端组件。


使用 AMQP 和 Vert.x 实现微服务间的异步通信


验证消息数目及延时


QPid,作为服务之间通信的异步集线器,提供了超快骨干。一旦完成应用程序测试之后,你可以使用其IMAGE ID登录QPid路由的Docker容器,并运行qdstat以查看各种指标。


使用 AMQP 和 Vert.x 实现微服务间的异步通信


总结


Apache QPid为微服务之间的通信提供了一个超快的主干通讯。由于 AMQP 是一种线级协议,在其他栈(如.net)中编写的服务也可以使用相同的通信通道。Java 开发人员可以使用 Vert.x AMQP birdge 工具轻松实现基于 amqp 的异步服务间通信模式。


开源中国征稿开始啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 200 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:



使用 AMQP 和 Vert.x 实现微服务间的异步通信


推荐阅读



点击“阅读原文”查看更多精彩内容

以上是关于使用 AMQP 和 Vert.x 实现微服务间的异步通信的主要内容,如果未能解决你的问题,请参考以下文章

微服务直播Netty和Vert.x在Apache顶级项目ServiceComb中的应用

Vert.x 入门实战

vert.x 事件总线能否取代对 Kafka 的需求?

如何使用 Vert.x 实现非阻塞 REST Web 服务

基于大数据的Uber数据实时监控(Prat 3:使用Vert.x的实时仪表盘)

Vert.x!这是目前最快的 Java 框架