2KB项目,专业的源码交易网站 帮助 收藏 每日签到

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

  • 时间:2019-01-23 18:23 编辑:2KB 来源:2KB.COM 阅读:537
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:Asy
英文原文:Asynchronous communication between microservices using AMQP and Vert.x

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

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

本文中,我会通过基于高级消息队列协议(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文件来运行本例的所有三个组件:

docker-compose up

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

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

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

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

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

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

执行

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

docker run -it -p 5672:5672 ceposta/qdr
  • 编译并执行前端服务:

cd frontend 
mvn clean install
java -jar target/frontend-service-full.jar
  • 编译并执行后端服务:

cd backend 
mvn clean install
java -jar target/backend-service-full.jar

测试

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

echo "GET http://localhost:8080/" | ./vegeta attack -duration=60s -rate=50 | tee results.bin | ./vegeta report

验证消息数目及延时

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

docker exec <container-name> qdstat -c
docker exec <container-name> qdstat -l
docker exec <container-name> qdstat -a

总结

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

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部