java - 可以直接向队列发送消息请求吗?

标签 java queue jms activemq

我有一个从队列接收消息的客户端。我目前有一个实现 onMessage()MessageListener

收到消息后,将对其进行进一步处理,然后通过 onMessage() 方法将其保存到数据库中;然后客户端确认收到消息。

只要数据库启动就没有问题。但如果数据库宕机,客户端将不会确认。

为了满足这一点,我希望客户端按计划的时间间隔向队列发送计划的请求,以获取任何未确认的消息。

事实上,我执行此操作的唯一方法是重新启动客户端,这并不理想。有没有办法触发队列重新发送未确认的消息而不需要重新启动?

我在onMessage()中拥有什么:

//code to connect to  queue
try {
if (DB is available){
        //process message
        //save required details to DB
        msg.acknowledge();
    }
    else{
        //schedule to request same message later from queue
    }
} catch (Exception e) {}

最佳答案

我认为标准行为已经在做你想要的事情:如果消息代理使用相同的数据库并且数据库不可用,它将不会接受消息,因此客户端将假脱机它们,直到消息代理准备好再次。

如果它们不共享相同的数据库并且消息代理已打开,则它将对消息进行假脱机处理,并在 onMessage 抛出异常时重试。 消息代理将尝试根据其可配置策略重新发送。

关于java - 可以直接向队列发送消息请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776703/

相关文章:

java - 单击按钮即可编辑整行

java - GWT 客户端中的静态类、方法和字段

groovy 中的 Python 队列类型

python - 将队列传递给 ThreadedHTTPServer

java - 启动 MQ Listener 时出现 MQJCA1025 错误

java - WebSphere MQ 调用失败,compcode '2' ('MQCC_FAILED' ) 原因 '2058' ('MQRC_Q_MGR_NAME_ERROR' )

java - 使用 jdbc 连接到数据库的安全问题

java - 如何获取当前周和月的第一天?

list - 列表的堆栈和队列 "special cases"如何?

java - Spring 入站 channel 适配器的最大数量是多少?