【问题标题】:Rabbitmq binding exchange to exchangeRabbitmq 绑定交换到交换
【发布时间】:2012-08-23 11:44:59
【问题描述】:

我正在寻找一种方法来保护我的网站消息系统,以便用户只获取他们应该有权访问的数据。考虑到这一点,我想到了一个系统,我有一个主主题交换,我的服务器会将所有消息发送到该交换。

网站为每个用户保存一个 sessionId。当用户通过身份验证时,会创建另一个名为 sessionId 的交换。允许客户端用户绑定到除主服务器之外的所有交换器。由于 sessionID 是唯一的,因此很难猜测其他用户的 sessionID 并绑定以获取他们的消息。

每条消息都会有一个路由键 sessionID.destination。客户端将知道所有潜在的目的地。

为了帮助可视化:

                            -> SessionID Exchange -> client
Server -> master Exchange | -> SessionID Exchange -> client
                            -> SessionID Exchange -> client

我的问题有两个。是否可以将交换绑定到rabbitmq中的交换?另外,以前有人设置过这样的系统吗?相反,有没有人在这个主题上有经验已经有一个我可以使用的工作系统?

提前致谢。

【问题讨论】:

标签: rabbitmq messaging amqp rabbitmq-exchange


【解决方案1】:

是的,可以绑定和交换到和交换。您甚至可以进行不同类型的交换。您需要使用channel.exchangeBind() 而不是channel.queueBind()。但它以类似的方式工作。

我的系统中有一个与扇出交换绑定的主题交换。我确保将路由密钥与发送到扇出交换的消息一起发送。它在扇出交换级别没有影响,但是当它被路由到主题交换时,路由键将用于确定它被发送到哪些队列。

【讨论】:

  • 我记得从 rabbitmq 博客中将队列绑定到交换会增加它的路由时间。您知道将交换绑定到交换是否会造成更大的性能损失?
  • 我无法确定绑定和交换与交换涉及哪些性能问题。但是我真的不明白您将队列绑定到交换会影响性能是什么意思。如果和交换没有绑定到它的队列,那么消息将不会去任何地方。我会说那是更大的性能打击
  • 绑定队列到交换是一个代价高昂的过程。将队列绑定到许多交换器会导致绑定流失。一个更好的可扩展性解决方案是使用交换器来交换绑定。客户端将创建自己的私有交换并绑定到服务器上的交换。 Exchange 到 Exchange 绑定在性能上更好,并解决了可扩展性问题。
【解决方案2】:

在单个exchange和多个队列绑定的情况下,客户端发送的消息将通过exchange到达基于绑定的可能队列。这意味着来自客户端的消息将通过exchange一跳到达目标队列。

假设您希望根据绑定将消息发送到可能的目标队列,ALSO 需要更多的跃点到不同的交换器及其队列绑定。在这种情况下,交换到交换绑定将符合目的。

将队列绑定到交换是一个代价高昂的过程。交换到交换绑定更灵活且可扩展性更好的解决方案。客户端可以创建自己的私有交换并绑定到服务器上的专用交换。 Exchange 到 Exchange 绑定在性能上更好,并解决了可伸缩性问题。

【讨论】:

    【解决方案3】:

    我发现这个博客谈到了与我的设计类似的东西。这并不完全相同,但它让我知道这至少是可能的。

    http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多