Rest 基于事件的微服务:使用代理的MQTT还是使用API网关的HTTP?

Rest 基于事件的微服务:使用代理的MQTT还是使用API网关的HTTP?,rest,mqtt,publish-subscribe,broker,Rest,Mqtt,Publish Subscribe,Broker,我正在尝试开发一个使用微服务的项目 关于这个话题,我有一些问题,有些问题不清楚: 1如何实现微服务通信 HTTP:每个微服务公开HTTP API,一个API网关广播请求 B MQTT:每个微服务发布/订阅到一个代理 C:但如何理解其中一个比另一个好呢 即使对于通常通过HTTP执行的经典操作,我也必须使用pub/sub协议作为标准吗?例如,我有两个微服务: 网络管理和产品服务。web管理是一个允许管理员添加、修改。。。其电子商务数字商店中的产品。假设我们想要实现createProduct操作。根据

我正在尝试开发一个使用微服务的项目

关于这个话题,我有一些问题,有些问题不清楚:

1如何实现微服务通信

HTTP:每个微服务公开HTTP API,一个API网关广播请求

B MQTT:每个微服务发布/订阅到一个代理

C:但如何理解其中一个比另一个好呢

即使对于通常通过HTTP执行的经典操作,我也必须使用pub/sub协议作为标准吗?例如,我有两个微服务: 网络管理和产品服务。web管理是一个允许管理员添加、修改。。。其电子商务数字商店中的产品。假设我们想要实现createProduct操作。根据事件/命令的区别,这是一个命令,一对一的通信

我可以在产品服务中打开一个API,比如说POST,/product来添加新产品。我还可以在productCreationRequest事件中实现此转换命令。在这种情况下:web Manager发布此事件。产品服务侦听productCreationRequest事件以及productUpdateRequest、productGetEvents等。。。收到通知后,它将执行操作并发出productCreated事件

我觉得这个案子有点离谱。例如,“最后一次机会”服务可能会监听productCreated并立即向客户发送邮件或推送通知。您如何看待这个用例


2哪一种可能是有效的代理我将使用docker compose或kubernetes来编排容器化微服务:语言可能采用java、javascript、python?

考虑使用SMF framework for javascript/Node.js,它通过消息代理RabbitMQ在微服务之间创建发布/订阅通信原型:


对于message broker路由,使用事件驱动的命名约定,例如发布一个web.new-product,其中web是子系统名称,new-product是事件名称。

考虑使用SMF framework for Javascript/Node.js,它通过消息代理RabbitMQ在微服务之间创建发布/订阅通信原型:


对于MessageBroker路由,使用事件驱动的命名约定,例如发布web.new-product,其中web是子系统名称,new-product是事件名称。

两者都是绝对可能的!选择一个代理,它允许您轻松地在HTTP同步通信和更异步的事件驱动发布/订阅之间进行混合和匹配。它应该允许您根据需要在这两个选项之间迁移微服务

HTTP API在分布式应用程序的边缘非常有用,客户希望提交订单或其他东西,并阻止等待响应

但在应用程序内部,在微服务之间,很多微服务都不需要响应。。。异步,最终一致。并且使用类似于发布/订阅的MQTT可以轻松地支持多个下游消费者。MQTT的另一个重要用途是将更新流式传输到下游消费者。。。就像来自公共汽车或航空公司的数据馈送,而不必轮询RESTAPI以获取更新

对于您的用例和类似的用例,我几乎总是建议使用pub/sub通信,即使今天它是一个简单的请求-响应交互,只有一个后端进程。HTTP上的REST是点对点的,也许将来您希望另一个进程能够看到/使用/监视该事件或交互。如果您已经在使用publish-subscribe,那么添加该数据流的第二个或更多使用者就很简单了。使用REST/HTTP更难

就性能而言,我非常怀疑像HTTP这样的阻塞协议是否会优于异步和双向协议,比如使用WebSocket进行web通信的MQTT

对于将所有这些粘合在一起的代理,请查看标准版Solace PubSub+事件代理。。。可以在MQTT和HTTP之间执行和转换。我甚至还写了一个哈哈


顺便说一句,我是为安慰而工作的!仅供参考。

两者都有可能!选择一个代理,它允许您轻松地在HTTP同步通信和更异步的事件驱动发布/订阅之间进行混合和匹配。它应该允许您根据需要在这两个选项之间迁移微服务

HTTP API在分布式应用程序的边缘非常有用,客户希望提交订单或其他东西,并阻止等待响应

但在应用程序内部,在微服务之间,很多微服务都不需要响应。。。异步,最终一致。并且使用类似于发布/订阅的MQTT可以轻松地支持多个下游消费者。MQTT的另一个重要用途是将更新流式传输到下游消费者。。。就像来自公共汽车或航空公司的数据馈送,而不必轮询RESTAPI以获取更新

对于您的用例和类似的用例,我 ould几乎总是建议使用pub/sub通信,即使今天它是一个简单的请求-响应交互,只需一个后端进程。HTTP上的REST是点对点的,也许将来您希望另一个进程能够看到/使用/监视该事件或交互。如果您已经在使用publish-subscribe,那么添加该数据流的第二个或更多使用者就很简单了。使用REST/HTTP更难

就性能而言,我非常怀疑像HTTP这样的阻塞协议是否会优于异步和双向协议,比如使用WebSocket进行web通信的MQTT

对于将所有这些粘合在一起的代理,请查看标准版Solace PubSub+事件代理。。。可以在MQTT和HTTP之间执行和转换。我甚至还写了一个哈哈


顺便说一句,我是为安慰而工作的!仅供参考。

谢谢您的回复!这真的很有帮助,对于这个特定的案例,性能如何?mqtt和http的行为是否相似?我怀疑您是否会注意到这种情况下的任何性能差异。谢谢@Serge您澄清了我的疑问!谢谢你的回复!这真的很有帮助,对于这个特定的案例,性能如何?mqtt和http的行为是否相似?我怀疑您是否会注意到这种情况下的任何性能差异。谢谢@Serge您澄清了我的疑问!