我在RabbitMQ上有一个类似于作业队列的东西,并且在请求取消作业时,我想撤回尚未开始处理的任务(他们的消息未被确认),这对应于撤回这些消息来自他们被路由到的队列.
我没有在AMQP或RabbitMQ API中找到此功能; 也许我的搜索不够好?或者我是否必须使用解决方法(这不难,但仍然)?
我会通过让工作人员检查某种权威数据源来确定作业是否应该继续来解决这个问题.例如,工作人员将检查作业在数据库中的状态,以查看作业是否已被取消.
对于处理作业的速度可能快于可以更新和读取权威商店的速度的情况,为其他特征换取速度的保证较少的数据存储可能是有用的.
这方面的一个例子是使用Redis作为存储来取消消息的处理,而不是像MySQL这样的关系数据库.Redis非常快,但对它所拥有的数据提供的保证较少,而MySQL速度要慢得多,但对它所拥有的数据提供了更多的保证.
最后,使用其他来源检查是否处理消息的概念是相同的,但实现方式取决于您的特定方案.