阿祖尔服务总线是一种企业级云消息传递服务。它将应用程序解耦,使它们无需同时在线即可进行通信。服务之间不再直接相互调用,而是将消息发送到服务总线,其他服务在准备就绪时接收这些消息。蓝永达公司广泛使用服务总线来连接逻辑应用、函数应用以及 Salesforce 和 ServiceNow 等外部系统——它是该公司构建的每个可靠集成项目的骨干。
为何选择消息传递而非直接 API 调用
直接的 API 调用会产生紧密耦合:系统 A 通过超文本传输协议调用系统 B,如果 B 宕机,A 会立即失败;如果 B 响应缓慢,A 会等待并阻塞。服务总线用松散耦合取代了这种直接调用——系统 A 将消息发送到服务总线,系统 B 在准备就绪时读取该消息。这意味着即使 B 暂时宕机,消息也会安全地等待,A 永远不会因为采用“发送即忘”模式而阻塞,多个系统可以独立读取同一条消息,并且每条消息都会留下完整的审计轨迹。
队列与主题
队列是一对一的模式(一个发送者,一个接收者)——消息从一端进入,恰好由一个消费者读取,一旦读取,消息即被删除。这适用于一个系统应恰好处理每条消息一次的场景,例如订单服务通过队列向履约服务发送工作,其中每个订单恰好由一个工作人员处理。
主题是一对多的模式(一个发送者,多个接收者)——消息发布一次,附加到该主题的每个订阅者都会获得自己独立的副本。这适用于多个系统需要对同一事件做出反应的场景,例如订单服务向一个主题发布消息,库存订阅者、通知订阅者和分析订阅者各自独立地接收相同的订单事件。
订阅与过滤器
每个主题订阅都可以设置过滤器,以便仅接收其真正关心的消息,这在企业集成的路由中非常强大。在名为“订单事件”的主题上,一个名为“高优先级订单”的订阅可能会过滤“优先级等于高”的消息,从而仅接收高优先级订单。一个名为“国际订单”的订阅可能会过滤“区域不等于美国”的消息,从而仅接收非美国地区的订单。一个名为“所有订单”且没有任何过滤器的订阅则会接收发布到该主题的每一条订单事件。
死信队列
死信队列(简称 DLQ)是服务总线中最重要的概念之一。当一条消息在达到最大重试次数后仍无法成功处理时,服务总线会自动将其移动到死信队列,而不是永久丢失。
在正常流程中,生产者将消息发送到队列,消费者成功处理该消息,随后消息在处理成功后被删除。在失败消息流程中,生产者发送消息,消费者抛出异常,第一次重试失败,第二次重试失败,第三次重试失败并达到最大重试次数,随后消息被移动到死信队列,而原始队列中排在其后的消息则不再受阻。死信队列本身位于一个可预测的路径——对于名为“myqueue”的队列,其死信路径为“myqueue/$DeadLetterQueue”。
出于以下几个具体原因,这在生产环境中至关重要:消息永远不会无声无息地丢失;失败的消息不会阻塞队列中排在后面的健康消息;可以直接检查确切的失败原因;可以修复底层问题并重新处理消息;并且拥有完整的审计轨迹以满足合规性要求。
在 C Sharp 中发送消息
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。