我正在寻找一种方法来保护我的网站消息系统,以便用户只能获取他们应该有权访问的数据。考虑到这一点,我想到了一个系统,我有一个主要主题交换,我的服务器将发送所有消息。
该网站为每个用户保存一个sessionId。对用户进行身份验证后,将创建另一个名为sessionId的交换。允许客户端用户绑定到除主服务器之外的所有交换机。由于sessionID是唯一的,因此很难猜测另一个用户sessionID并绑定以获取他们的消息。
每条消息都有一个sessionID.destination的路由密钥。客户端将了解所有潜在目的地。
帮助可视化:
-> SessionID Exchange -> client
Server -> master Exchange | -> SessionID Exchange -> client
-> SessionID Exchange -> client
我的问题有两个问题。是否有可能将交易所绑定到rabbitmq的交易所?还有,有人建立了这样的系统吗?相反,有这方面经验的人是否已经拥有了我可以使用的工作系统?
先谢谢。
答案 0 :(得分:4)
是的,可以绑定和交换和交换。您甚至可以进行不同类型的交流。您需要使用channel.exchangeBind()
代替channel.queueBind()
。但它的工作方式类似。
我的主题交换绑定到我系统中的扇出交换。我确保发送一个路由密钥,其中包含发送到扇出交换的消息。它在扇出交换级别没有任何影响,但是当它被路由到主题交换时,路由密钥然后用于确定它被发送到哪个队列。
答案 1 :(得分:0)
我发现这篇博客谈到了类似于我设计的东西。这不是一回事,但它让我知道它至少是可能的。
答案 2 :(得分:0)
在单个交换和多个队列绑定的情况下,客户端发送的消息将通过交换到达可能的队列基于绑定。这意味着来自客户端的消息将通过一跳交换到达目标队列。
考虑一种情况,您希望根据绑定将消息发送到可能的目标队列, ALSO 将更多跳转到不同的交换机及其队列绑定。在这种情况下,交换绑定将符合目的。
将队列绑定到交换是一个代价高昂的过程。交换绑定交换更灵活,更好的可扩展性解决方案。客户端可以创建自己的私有交换并绑定到服务器上的特殊用途交换。 Exchange交换绑定在性能方面更好,并解决了可伸缩性问题。