使用 Azure 服务总线在 2 个组织之间进行通信
Using Azure Service Bus to communicate between 2 organizations
我们希望分离两个独立组织之间的系统(例如:一个可以是一组内部应用程序,另一个可以是一组第三方应用程序)。虽然我们可以使用基于 REST 的 API 来做到这一点,但我们希望实现时间解耦、可伸缩性、可靠和持久的通信、工作负载解耦(通过扇出)等。出于这些原因,我们希望使用消息巴士.
现在可以使用 Amazon 的 SNS 和 SQS 作为消息总线基础设施,我们的组织将拥有一个 SNS 实例,该实例将发布到第 3 方 SQS 实例。同样,对于第 3 方希望发送给我们的消息,他们会 post 到他们的 SNS 实例,然后该实例将发布到我们的 SQS 实例。参见:Cross Account Integration with Amazon SNS
我在考虑如何使用 Azure 服务总线 (ASB) 实现这种跨组织集成,因为我们在 Azure 上投入了大量资金。但是,ASB 无法从一个实例发布到属于不同组织的另一个实例(甚至不能发布到同一组织中的另一个实例,至少目前还不能)。鉴于此限制,我们的计划是为第 3 方供应商提供单独的连接字符串集,以允许他们侦听和处理我们 posted 的消息,以及一组单独的连接字符串,让他们 post 消息到我们可以订阅和处理的主题。
我的问题是:这是个好主意吗?或者这会被视为反模式吗?我最大的担忧是,虽然使用消息总线的目的是实现解耦,但 ASB 的基础设施部分使我们紧密耦合到我们需要在两个组织之间进行通信的地步,不仅是端点,而且此外,queue/topic 是如何设置的(会话、或无会话、重复检测等)以及消费者与发送者发送消息的方式(用作会话 ID、消息 ID 等的内容)紧密相关。
这是一个合理的担忧吗?
你这样做了吗?
我可能 运行 遇到哪些其他问题?
对发送者和接收者(Send
和 Listen
)使用具有不同共享访问策略的 Azure 服务总线连接字符串旨在供具有有限权限的发送者和接收者使用。就像你打算使用它一样。
My biggest concern is the fact, that while the point of using a message bus was to achieve decoupling, the infrastructure piece of ASB is making us tightly coupled to the point that we need to communicate between the 2 organizations on not just the endpoints, but also, how the queue/topic was setup (session, or no session, duplicate detection etc) and the consumer is tightly coupled to how the sender sends messages (what was used as the session id, message id, etc).
耦合总是存在的。您与正在使用的语言有关。用于保存数据的数据存储技术。您正在使用的云供应商。这不是我担心的耦合类型,除非您计划每月更换一次。
没有更具体的通信模式。会话将是业务需求而不是耦合。如果您需要有序的消息传递,那么您还会做什么?在亚马逊上,您也会 "coupling" 进入 FIFO 队列以获得订单。消息 ID 也绝不是耦合的。它是消息的一个属性。如果接收者选择忽略它,他们可以。是的,您正在耦合使用 BrokeredMessage/Message
信封和序列化,但您还可以如何发送和接收消息?这更像是一份 合同 供各方达成一致。
在组织之间连接服务总线的模式的一个名称是 "Shovel"(这就是它们在 RabbitMq 中的名称)
Sometimes it is necessary to reliably and continually move messages
from a source (e.g. a queue) in one broker to a destination in another
broker (e.g. an exchange). The Shovel plugin allows you to configure a
number of shovels, which do just that and start automatically when the
broker starts.
就 Azure 而言,实现 "shovels" 的一种方法是使用逻辑应用程序,因为它们提供了连接到不同命名空间中的 ASB 实体的能力。
参见:
我们希望分离两个独立组织之间的系统(例如:一个可以是一组内部应用程序,另一个可以是一组第三方应用程序)。虽然我们可以使用基于 REST 的 API 来做到这一点,但我们希望实现时间解耦、可伸缩性、可靠和持久的通信、工作负载解耦(通过扇出)等。出于这些原因,我们希望使用消息巴士.
现在可以使用 Amazon 的 SNS 和 SQS 作为消息总线基础设施,我们的组织将拥有一个 SNS 实例,该实例将发布到第 3 方 SQS 实例。同样,对于第 3 方希望发送给我们的消息,他们会 post 到他们的 SNS 实例,然后该实例将发布到我们的 SQS 实例。参见:Cross Account Integration with Amazon SNS
我在考虑如何使用 Azure 服务总线 (ASB) 实现这种跨组织集成,因为我们在 Azure 上投入了大量资金。但是,ASB 无法从一个实例发布到属于不同组织的另一个实例(甚至不能发布到同一组织中的另一个实例,至少目前还不能)。鉴于此限制,我们的计划是为第 3 方供应商提供单独的连接字符串集,以允许他们侦听和处理我们 posted 的消息,以及一组单独的连接字符串,让他们 post 消息到我们可以订阅和处理的主题。
我的问题是:这是个好主意吗?或者这会被视为反模式吗?我最大的担忧是,虽然使用消息总线的目的是实现解耦,但 ASB 的基础设施部分使我们紧密耦合到我们需要在两个组织之间进行通信的地步,不仅是端点,而且此外,queue/topic 是如何设置的(会话、或无会话、重复检测等)以及消费者与发送者发送消息的方式(用作会话 ID、消息 ID 等的内容)紧密相关。
这是一个合理的担忧吗? 你这样做了吗? 我可能 运行 遇到哪些其他问题?
对发送者和接收者(Send
和 Listen
)使用具有不同共享访问策略的 Azure 服务总线连接字符串旨在供具有有限权限的发送者和接收者使用。就像你打算使用它一样。
My biggest concern is the fact, that while the point of using a message bus was to achieve decoupling, the infrastructure piece of ASB is making us tightly coupled to the point that we need to communicate between the 2 organizations on not just the endpoints, but also, how the queue/topic was setup (session, or no session, duplicate detection etc) and the consumer is tightly coupled to how the sender sends messages (what was used as the session id, message id, etc).
耦合总是存在的。您与正在使用的语言有关。用于保存数据的数据存储技术。您正在使用的云供应商。这不是我担心的耦合类型,除非您计划每月更换一次。
没有更具体的通信模式。会话将是业务需求而不是耦合。如果您需要有序的消息传递,那么您还会做什么?在亚马逊上,您也会 "coupling" 进入 FIFO 队列以获得订单。消息 ID 也绝不是耦合的。它是消息的一个属性。如果接收者选择忽略它,他们可以。是的,您正在耦合使用 BrokeredMessage/Message
信封和序列化,但您还可以如何发送和接收消息?这更像是一份 合同 供各方达成一致。
在组织之间连接服务总线的模式的一个名称是 "Shovel"(这就是它们在 RabbitMq 中的名称)
Sometimes it is necessary to reliably and continually move messages from a source (e.g. a queue) in one broker to a destination in another broker (e.g. an exchange). The Shovel plugin allows you to configure a number of shovels, which do just that and start automatically when the broker starts.
就 Azure 而言,实现 "shovels" 的一种方法是使用逻辑应用程序,因为它们提供了连接到不同命名空间中的 ASB 实体的能力。
参见: