gpt4 book ai didi

java - 使用 Spring AMQP 使用后自动从队列中删除消息

转载 作者:行者123 更新时间:2023-11-30 02:49:25 25 4
gpt4 key购买 nike

我有 2 个应用程序使用 RabbitMQ 交换数据。我已经使用 Spring AMQP 实现了这一点。我有这样的场景:一旦消费者消费了消息,处理时可能会遇到异常。

如果出现任何异常,我计划登录数据库。一旦消息到达消费者,无论是成功处理还是遇到错误,我都必须显式地从队列中删除消息。

How to forcefully remove the message from queue otherwise it will be there if my application fails to process it?

下面是我的监听器代码

 @RabbitListener(containerFactory="rabbitListenerContainerFactory",queues=Constants.JOB_QUEUE)
public void handleMessage(JobListenerDTO jobListenerDTO) {
//System.out.println("Received summary: " + jobListenerDTO.getProcessXML());
//amqpAdmin.purgeQueue(Constants.JOB_QUEUE, true);
try{
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("initiator", "cmy5kor");

Deployment deploy = repositoryService.createDeployment().addString(jobListenerDTO.getProcessId()+".bpmn20.xml",jobListenerDTO.getProcessXML()).deploy();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(jobListenerDTO.getProcessId(), variables);

System.out.println("Process Instance is:::::::::::::"+processInstance);

}catch(Exception e){

e.printStackTrace();
}

配置代码

@Configuration
@EnableRabbit
public class RabbitMQJobConfiguration extends AbstractBipRabbitConfiguration {


@Bean
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
template.setQueue(Constants.JOB_QUEUE);
template.setMessageConverter(jsonMessageConverter());
return template;
}


@Bean
public Queue jobQueue() {
return new Queue(Constants.JOB_QUEUE);
}


@Bean(name="rabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
Jackson2JsonMessageConverter messageConverter = new Jackson2JsonMessageConverter();
DefaultClassMapper classMapper = new DefaultClassMapper();
Map<String, Class<?>> idClassMapping = new HashMap<String, Class<?>>();
idClassMapping.put("com.bosch.diff.approach.TaskMessage", JobListenerDTO.class);
classMapper.setIdClassMapping(idClassMapping);
messageConverter.setClassMapper(classMapper);
factory.setMessageConverter(messageConverter);
factory.setReceiveTimeout(10L);
return factory;
}



}

最佳答案

我不知道 rmq 的 spring api 或配置,但这

 I have to remove message from the queue explicitly once the message reaches the consumer whether it is successful processing or error encountered.

这正是设置自动确认标志时发生的情况。这样,消息一旦被使用就会被确认 - 因此从队列中消失了。

关于java - 使用 Spring AMQP 使用后自动从队列中删除消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com