Asynchronous 如何使消息队列处于等待状态

Asynchronous 如何使消息队列处于等待状态,asynchronous,activemq,message,subscriber,Asynchronous,Activemq,Message,Subscriber,简化: 我在activemq中有一个队列。当从队列中读取某个消息时,我希望锁定队列,直到该进程结束对接收到的消息的处理 详细解释: 我有一个拥有大量用户的系统。每次用户更改其在系统中的状态(配置文件、角色、访问、资产所有权等),我都需要使用这些更改更新第三方服务器。 该第三方与我们是分开的,他们向我公开的api允许我一次只更新一个用户,大约需要一秒钟。 我使用ActiveMQ将主更新进程与更新第三方系统分离 每天晚上我都会收到一个提要文件,其中可能包含数千次用户更改。由于这是一项关键任务,而且更

简化:
我在activemq中有一个队列。当从队列中读取某个消息时,我希望锁定队列,直到该进程结束对接收到的消息的处理

详细解释:
我有一个拥有大量用户的系统。每次用户更改其在系统中的状态(配置文件、角色、访问、资产所有权等),我都需要使用这些更改更新第三方服务器。 该第三方与我们是分开的,他们向我公开的api允许我一次只更新一个用户,大约需要一秒钟。
我使用ActiveMQ将主更新进程与更新第三方系统分离

每天晚上我都会收到一个提要文件,其中可能包含数千次用户更改。由于这是一项关键任务,而且更新第三方对时间不太敏感,而且由于更新第三方可能需要从同一个表中读取数据,因此主进程是批量更新,因此我需要锁定队列。 也就是说,我希望activeMQ为我在主进程中更改的每个用户获取消息,但我也希望activeMQ保留这些消息,直到主进程完成


ActiveMQ中是否有任何内置机制可以执行此操作?

通常,每个使用者每次读取一条消息

您的侦听器通常如下所示:

void onMessage( Message message ) {

     // .. 
     updateExternalAPI(); // Sync. call to external API

 }
因此,当您的
onMessage
方法结束时,消息被提交,消费者将继续处理下一条消息。因此,如果只有一个消费者,那么一次只处理一条消息

如果您的服务器应用程序只有一个节点,那么这很容易——只需将其配置为仅使用单个使用者即可。在不同的框架/客户端库中有点不同

如果您不能做到这一点和/或有多个节点,ActiveMQ提供了一个解决方案。将
?consumer.exclusive=true
添加到客户机中的队列,以强制ActiveMQ选择要向其发送消息的单个客户机


示例
UPDATE.USER.INFO?consumer.exclusive=true

通常,每个消费者每次阅读一条消息

您的侦听器通常如下所示:

void onMessage( Message message ) {

     // .. 
     updateExternalAPI(); // Sync. call to external API

 }
因此,当您的
onMessage
方法结束时,消息被提交,消费者将继续处理下一条消息。因此,如果只有一个消费者,那么一次只处理一条消息

如果您的服务器应用程序只有一个节点,那么这很容易——只需将其配置为仅使用单个使用者即可。在不同的框架/客户端库中有点不同

如果您不能做到这一点和/或有多个节点,ActiveMQ提供了一个解决方案。将
?consumer.exclusive=true
添加到客户机中的队列,以强制ActiveMQ选择要向其发送消息的单个客户机


示例
UPDATE.USER.INFO?consumer.exclusive=true

如果我理解正确,您的系统是[UPDATE process]-AMQ->[adapter]-AMQ->[3rd party API],并且您不希望适配器在更新过程将所有消息输入之前运行?如果我理解正确,您的系统是[UPDATE process]-AMQ->[adapter]->[3rd party API],并且在更新进程将所有消息输入之前,您不希望适配器运行?只有一个使用者。但是,当任意进程正在运行时,ActiveMQ将不再释放其队列中的消息。他希望ActiveMQ保留这些消息,直到AMQ获得“绿灯"这是正确的。我已经实现了我自己的锁定解决方案,但我想知道是否有方法向AMQ发出信号,以锁定单个主题/队列只有一个使用者。但他想知道的是,当任意进程正在运行时,ActiveMQ将不再释放其队列中的消息。他希望ActiveMQ保留这些消息,直到AMQ停止我已经实现了我自己的锁定解决方案,但是想知道是否有一种方法可以向AMQ发出信号,以锁定单个主题/队列