问答 / 3 / 4 / 创建于 8个月前
目前业务上会使用快递,比如A服务、B服务等等会使用快递,日后可能还会有新的服务。我的这些服务都会依赖到快递的一些回调事件比如签收等。并且这些服务只会存储下快递单号,不会过多存储快递的其他信息。目前我能想法的一种做法是,在快递签收的回调事件中,通过Laravel的Event事件,然后分别设置A、B服务的Listener,然后分别通过快递单号去查询例如:
A服务查询是否有该快递单号,然后做A具体业务,没有跳过 B服务查询是否有该快递单号,然后做B具体业务,没有跳过
加多一层, 把 服务 和 快递 作为单独的一个提供服务或需要服务的应用,由这一层提供中介的服务。
这样的好处是, 服务 和 快递, 只做自己的事。比如 快递 不用做推送给服务A之类逻辑,而是告诉加多的这层。 至于要怎么处理,正是你现在要写的逻辑。
如果 快递 崩了,不会影响到服务,因为解耦了,就算中间层崩了,不会影响到 服务 或 快递正常业务,它一个中介的,没有直接 侵入 服务 或 快递的领域, 修复之后,数据都还在(指快递数据 或者服务者相关的数据)。
如果第三方服务崩了,应该考虑断路器模式。之前在 Laravel 中适配过一个 Guzzle 的断路器中间件:
CircuitBreakerGuzzleMiddleware
一般就是用队列,快递签收事件写入队列,要消费的服务自己去拉数据消费
a,b服务都要调用快递c查询接口,是否已签收的回调,快递信息更新,如果有个快递服务中间表和各类服务和快递关联起来,可以使用队列或者在事件回调中直接查询中间表关联的服务用户通知和更新对应数据
我要举报该,理由是:
加多一层, 把 服务 和 快递 作为单独的一个提供服务或需要服务的应用,由这一层提供中介的服务。
这样的好处是, 服务 和 快递, 只做自己的事。比如 快递 不用做推送给服务A之类逻辑,而是告诉加多的这层。 至于要怎么处理,正是你现在要写的逻辑。
如果 快递 崩了,不会影响到服务,因为解耦了,就算中间层崩了,不会影响到 服务 或 快递正常业务,它一个中介的,没有直接 侵入 服务 或 快递的领域, 修复之后,数据都还在(指快递数据 或者服务者相关的数据)。
一般就是用队列,快递签收事件写入队列,要消费的服务自己去拉数据消费
a,b服务都要调用快递c查询接口,是否已签收的回调,快递信息更新,如果有个快递服务中间表和各类服务和快递关联起来,可以使用队列或者在事件回调中直接查询中间表关联的服务用户通知和更新对应数据