2

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

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

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

为了帮助可视化:

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

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

提前致谢。

4

3 回答 3

4

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

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

于 2012-08-29T05:26:16.517 回答
1

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

考虑一种情况,您希望基于绑定将消息发送到可能的目标队列,需要更多的跃点到不同的交换及其队列绑定。在这种情况下,交换到交换绑定将符合目的。

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

于 2013-08-09T16:22:49.523 回答
0

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

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

于 2012-08-29T00:39:23.467 回答