【问题标题】:Design decision for text message queueing implementation文本消息队列实现的设计决策
【发布时间】:2013-05-17 15:29:58
【问题描述】:

我有一个场景,使用某些文本消息网关,我通过 servlet 中的 GET 接收传入消息,编写回复消息,使用 id 键将其存储在数据库中,然后使用相应的服务将其发送出去。消息发送结果通过 POST 发送给我(消息 ID 和文本结果(成功或失败))。

所以,我想实现的是消息队列:在失败的情况下以固定的重试次数一一发送消息。

我不能只是找到正确实施它的方法。例如,这就是我遇到的问题-在消息处理程序的 doGet 方法中,我正在接收新消息,编写回复,将回复消息存储到数据库中,然后将其放入单例队列中,以便在适当的时候将它们发送出去。然后我可以有某种带有 run() 方法的线程,它只是在无限循环中不断地从队列中一个接一个地获取消息,并尝试发送它一定次数(比如 5 次)。

如果消息发送成功 - 那么我只需要从队列中删除消息并打破内部循环。

这是我卡住的棘手部分 - 如果我通过 serv(消息 ID 和结果)中的 POST 获得结果,我如何在线程中确定消息是否发送成功?

我可以存储我现在尝试发送的消息的当前 ID,但这并没有让我更清楚。

那么,考虑到我的情况,实现消息队列的最佳方式是什么? 我并不是说我建议的设计决策在任何方面都足够并且需要保留。我会很感激任何帮助 - 无论是建议改进我看到解决我提到的问题的实现的方式,还是建议某种全新的更合适的方法,这将非常受欢迎。

非常感谢您!

【问题讨论】:

    标签: java servlets message-queue


    【解决方案1】:

    您可以使用一些外部方法来存储消息的状态,例如数据库。 POST 处理程序将使用成功或失败条件更新数据库,消息队列可以查询数据库的状态。

    【讨论】:

    • 谢谢!这几乎解决了我的问题,我只有一个问题——我想,在查询数据库之前我需要一些延迟——等待 POST 到来并让数据库更新,对吗?如果是这样,最好的处理方法是什么?
    • 您还可以存储队列最后一次尝试发送消息的时间。每次检查队列头部是否接收成功,还要检查上次发送消息是否是最近发送的,如果是,则将其放到队列的后面。
    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 2017-02-01
    • 2010-11-23
    • 2012-01-27
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多