gpt4 book ai didi

rest - 使用 REST 和 PUB/SUB 的微服务间通信

转载 作者:行者123 更新时间:2023-12-01 13:48:12 24 4
gpt4 key购买 nike

这在我脑海中仍然是一个理论。

我正在通过将事物拆分为微服务来重建我的后端。我想开始的微服务是:
- 订单(存储订单详细信息和每个订单的状态)
- 客户(存储客户详细信息、地址、预订的订单)
- 服务提供商(存储服务提供商详细信息、每个服务提供商的状态和位置、服务提供商当前正在处理的订单等)
- 付款(存储每个订单的付款信息)
- channel (通过电子邮件/短信/移动推送与客户沟通)

我希望能够使用 PUB/SUB 创建一 strip 有相应数据的消息,该消息可以被订阅该消息的任何其他微服务使用。

首先,我理解每个微服务都应该有完整的代码和数据隔离(因此,在不同的实例/虚拟机上)的概念;并且所有微服务都应严格使用 HTTP REST API 契约(Contract)进行通信。

我的疑惑如下:

  1. 为了显示订单列表,我将使用订单数据库获取所有订单。在每个订单文档中(我将使用 MongoDB 进行存储),我将拥有一个 customer_id 外键。现在用customer_id解析customer_name的问题。
    如果我需要在页面上显示 100 个订单并假设每个订单都有一个与之关联的唯一 customer_id,那么我是否需要执行 REST API 调用 100 次才能获取所有 100 个 customer_id 的名称?或者,数据复制是解决这个问题的好方法吗?

  2. 我正在设想这样的 w.r.t. PUB/SUB:业务中心人员将订单标记为已分配并选择服务提供商分配给该订单。这会在跨服务器 PUB/SUB channel 上创建一条消息。
    然后,Channel 微服务(位于完全不同的实例/VM 上)捕获此消息并使用消息内容中的数据将推送消息和 SMS 发送到服务提供商的设备。
    这可能吗?
    问题 2 的更新:我希望 Order 微服务完全独立于将在其之上/并排构建的任何其他微服务。 channel 微服务是微服务的一个示例,它依赖于订单微服务中发生的事件。

此外,请指导我使用哪些技术/库。

我要开发的内容:
java
数据库
每个微服务的亚马逊 AWS 实例。

在此感谢任何人的帮助。
谢谢!

最佳答案

#1

If I need to show 100 orders and each order has a unique customer_id, will I need to do 100 REST API call?

不,只需使用 100 个 order_id 发出 1 个请求并返回 order_id <=> customer_id 的字典

#2
这是一个单一的请求

POST
/orders/new
{
"selected_service_provider_id" : "123"
...
}

它可以为您返回 order_id,您可以在本地为客户打印它或跟踪进度或您有什么。

在服务器端,您收到一个订单并对其进行处理。处理可以包括在某个阶段发送 SMS。此功能可以在接收此请求的原始服务中实现,也可以作为对另一个专用服务的单独调用来实现。

关于rest - 使用 REST 和 PUB/SUB 的微服务间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com