当前位置: 首页 > 知识库问答 >
问题:

如何从activemq中删除已使用的消息?

孟增
2023-03-14

我已经尝试了下面的代码。

@Component
public class JmsProducer {

    @Autowired
    JmsTemplate jmsTemplate;
    
    @Value("${gkz.activemq.queue}")
    String queue;
    
    public void send(Customer customer){
        jmsTemplate.convertAndSend(queue, customer);
    }
}
@Component
public class JmsConsumer {
    @Autowired
    private MessageStorage customerStorage;

    @JmsListener(destination = "${gkz.activemq.queue}",containerFactory="jsaFactory")
    public void receive(Customer customer){
        System.out.println("Recieved Message: " + customer);
        customerStorage.add(customer);
    }
}
@PostMapping(value="/api/customer")
public Customer postCustomer(@RequestBody Customer customer){
    jmsProducer.send(customer);
    return customer;
}

@GetMapping(value="/api/customers")
public List<Customer> getAll(){
    List<Customer> customers = customerStorage.getAll();
    return customers;
}

@DeleteMapping(value="/api/customers/clear")
public String clearCustomerStorage() {
    customerStorage.clear();
    return "Clear All CustomerStorage!";
}
public class MessageStorage {
    private List<Customer> customers = new ArrayList<>();

    public void add(Customer customer) {
        customers.add(customer);
    }

    public void clear() {
        customers.clear();
    }

    public List<Customer> getAll(){
        return customers;
    }
}
@Configuration
public class ConnectionFactoryConfiguration {
    
    @Value("${gkz.activemq.broker.url}")
    String brokerUrl;
    
    @Value("${gkz.activemq.borker.username}")
    String userName;
    
    @Value("${gkz.activemq.borker.password}")
    String password;
    
    @Bean
    public ConnectionFactory connectionFactory(){
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
        connectionFactory.setBrokerURL(brokerUrl);
        connectionFactory.setUserName(userName);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }
    
    @Bean
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        return converter;
    }
    
    
    //Used for Receiving Message
    @Bean
    public JmsListenerContainerFactory<?> jsaFactory(ConnectionFactory connectionFactory,
                                                    DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setMessageConverter(jacksonJmsMessageConverter());
        configurer.configure(factory, connectionFactory);
        return factory;
    }
 
    
    //Used for Sending Messages.
    @Bean
    public JmsTemplate jmsTemplate(){
        JmsTemplate template = new JmsTemplate();
        template.setMessageConverter(jacksonJmsMessageConverter());
        template.setConnectionFactory(connectionFactory());
        return template;
    }
    
}

整个代码https://grokonez.com/java-integration/distributed-system/activemq-producer-consumer-springboot-restapis-example

共有1个答案

濮佑运
2023-03-14

单击MQ上的清除选项,然后重新启动MQ服务。这将清除所有未处于挂起状态的消息。

 类似资料:
  • 我最近将一台服务器从ActiveMQ从5.8升级到了最新版本(5.11.1)。从那以后,我偶尔注意到,消息将在特定队列中累积,而不会被删除。 我们的架构有一个生产者,一个消费者。我可以看到消费者仍然保持联系,但制作人的信息越来越多。我的解决方案是通过web控制台删除队列。之后,我立即看到消费者重新连接,消息再次开始处理。 如果相关,在这种情况下,生产者正在运行NMS。NET和消费者在Java 1.

  • 问题内容: 我正在使用JavaMail-1.5将Gmail帐户的IMAP消息附加到Yahoo帐户。我的要求是从邮件中删除用户标志,因为将邮件附加到其他文件夹时会产生错误。我要从消息中删除所有用户标志吗? 下面是获取标志的代码。 请建议如何从我的邮件中删除。 谢谢 问题答案: 我的问题已通过此代码解决- 此代码删除了导致无法将Gmail附加邮件添加到Yahoo的标志。

  • 对于从Spring Boot API发送的每个查询,我都会收到以下警告消息,并希望将其从日志中删除。 我正在使用RestHighLevelClient。根据Elasticsearch的说法,这可以通过迁移到他们最近推出的Elasticsearch Java API客户端来解决。然而,这将需要很长时间才能让我们做出这样的改变。 Elasticsearch版本是7.14.1,不幸的是,我们无法升级它。

  • 我创建了一个制作人和一个消费者,使用“Kafka节点”包发送和消费Kafka主题的消息。生产者和消费者通过API进行调用。POST方法用于向主题发送消息,而GET方法用于在消费者处从主题获取消息。 当我向KAFKA发送消息后调用consumer API时,之前的所有消息都会在。 我只需要最后一条消息,这是生产者发送的。 如何在不使用任何数组或任何东西的情况下获取最后一条消息。 有没有办法删除这个话

  • 我正在做一个聊天应用程序我想让用户能够删除聊天和消息从firebase数据库下面是我尝试使用一些代码删除消息适配器的代码,当我长时间点击消息,但当我登录到应用程序的消息回来。我使用firebase数据库

  • 这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无