代码之家  ›  专栏  ›  技术社区  ›  robsosno

如何避免发送重复消息

  •  0
  • robsosno  · 技术社区  · 7 年前

    由于公司的政策,我们(我的小团队)过去不能使用队列管理器(唯一允许的是Websphere MQ,但没有预算)。我们已经使用数据库实现了队列。我们的应用程序以数据库为中心,在.NET中实现。 最近这一点已经改变了-我们可以使用ActiveMQ或Rabbit。我们已经开始考虑迁移队列,但还没有决定使用哪个队列。

    它似乎不像最初看起来那么简单。 当我们使用业务密钥检查消息是否在队列中以避免重复时,很少有场景。例如:当不耐烦的用户发送信用卡申请两次(发送按钮点击两次),因为他还没有看到状态变化。我们负责后端,我们无法控制客户端应用程序。

    当前的实现是:如果该用户在最近一小时内请求获取信用卡,则获取用户名并在队列中搜索。 在数据库中搜索很容易。若找到匹配项,则引发异常,而不是将消息放入队列中。 我仍然不知道如何使用队列管理器执行此操作,我找不到有关此操作的任何信息。我只找到了一些关于使用消息id的信息,但在我们的例子中,重复的消息将有不同的信息。

    是否可以使用一些业务数据检查消息是否已经在队列中?

    1 回复  |  直到 7 年前
        1
  •  0
  •   robsosno    7 年前

    我的一所学院找到了解决办法。

    所以我们将从表中删除不必要的数据。其余字段为:msg_类型和msg_键。

    算法:

    1. 我们的服务收到请求

    2. 检查是否使用表中的业务密钥重复消息。如果是,则引发异常。

    3. 将消息放入队列,并将新消息键放入表中

    这只是一个想法。它尚未实施。很可能这个简单的模型需要一些修复。

    推荐文章