gpt4 book ai didi

RabbitMQ 安全设计,用于从服务器声明队列(并从客户端使用)

转载 作者:行者123 更新时间:2023-12-02 21:39:22 25 4
gpt4 key购买 nike

我有一个测试应用程序(首先使用 RabbitMQ),它在部分受信任的客户端上运行(因为我不希望它们自己创建队列),所以我将研究队列的安全权限和凭据客户端连接。

对于消息传递,大多数是从服务器到客户端的单向广播,有时是从服务器到特定客户端的查询(通过该查询,回复将发送到专用于服务器监听的客户端的replyTo队列上)以获得回复)。

我目前在服务器上有一个接收函数,用于查找来自客户端的“Announce”广播:

agentAnnounceListener.Received += (model, ea) =>
{
var body = ea.Body;
var props = ea.BasicProperties;
var message = Encoding.UTF8.GetString(body);

Console.WriteLine(
"[{0}] from: {1}. body: {2}",
DateTimeOffset.FromUnixTimeMilliseconds(ea.BasicProperties.Timestamp.UnixTime).Date,
props.ReplyTo,
message);

// create return replyTo queue, snipped in next code section
};

我希望在上面的接收处理程序中创建返回主题:

var result = channel.QueueDeclare(
queue: ea.BasicProperties.ReplyTo,
durable: false,
exclusive: false,
autoDelete: false,
arguments: null);

或者,我可以将收到的公告存储在数据库中,并定期运行此列表并在每次传递时为每个公告声明一个队列。

在这两种情况下,服务器将来都会使用这个新创建的 channel 向客户端发送查询。

我的问题是:

1)从客户端接收消息时在服务器上创建回复 channel 是否更好,或者如果我在外部(在计时器上)这样做,声明已经存在的队列(可能有数千个队列)是否存在任何性能问题端点)?

2)如果客户端开始错过行为,有什么方法可以启动它们(在接收功能中,我可以查找每分钟有多少条消息,如果满足某些条件则启动)?在管道中接收之前是否可以定义任何其他过滤器来踢掉发送过多消息的客户端?

3)在上面的示例中,请注意我的消息每次运行都会不断出现(相同的旧消息),我该如何清除它们?

最佳答案

我认为阻止客户端创建队列只会使设计复杂化,而没有太多的安全优势。您允许客户创建消息。在 RabbitMQ 中,阻止客户端向服务器发送大量消息并不容易。

如果您想对客户端进行速率限制,RabbitMQ 可能不是最佳选择。它确实有速率限制 automatically当服务器开始努力处理所有消息时,但您无法使用开箱即用的解决方案在服务器上为每个客户端设置严格的速率限制。此外,通常允许客户端创建队列。

方法 1 - Web 应用程序

也许您应该尝试使用网络应用程序:

  • 客户端通过您的服务器进行身份验证
  • 为了公告,客户端向某个端点(即 /api/announce)发送 POST 请求,可能会提供一些允许他们这样做的凭据
  • 要接收传入消息,GET/api/messages
  • 确认已处理的消息:POST/api/acknowledge

当客户确认收到时,您从数据库中删除您的消息。

通过这种设计,您可以编写自定义逻辑来限制速率或禁止行为不当的客户端,并且您可以完全控制您的服务器

方法 2 - RabbitMQ 管理 API

如果您仍然想使用 RabbitMQ,您可以通过使用 RabbitMQ Management API 来实现您想要的目标

您需要编写一个应用程序来基于计时器查询 RabbitMQ 管理 API,并且:

获取所有当前连接,并检查每个连接的消息速率。

如果消息速率超过您的阈值,请使用 /api/permissions/vhost/user 端点关闭连接或撤销用户的权限。

在我看来,如果您不需要所有排队功能(例如工作队列或复杂的路由)(可以使用 RabbitMQ 开箱即用),那么 Web 应用程序可能会更容易。

关于RabbitMQ 安全设计,用于从服务器声明队列(并从客户端使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com