Spring-RabbitMQ - mit manueller Kanal-Bestätigung auf einen Dienst mit @RabbitListener Konfiguration

Wie zu erkennen die Nachrichten manuell, ohne die Verwendung der automatischen Anerkennung.
Gibt es eine Möglichkeit, verwenden Sie diese zusammen mit der @RabbitListener und @EnableRabbit - Stil der Konfiguration.
Der größte Teil der Dokumentation erzählt uns SimpleMessageListenerContainer zusammen mit ChannelAwareMessageListener.
Jedoch mit, dass wir verlieren die Flexibilität, die bereitgestellt wird mit den Anmerkungen.
Ich konfiguriert haben, meinen Dienst als unten :

@Service
public class EventReceiver {

@Autowired
private MessageSender messageSender;

@RabbitListener(queues = "${eventqueue}")
public void receiveMessage(Order order) throws Exception {

  //code for processing order
}

Meine RabbitConfiguration ist als unten

@EnableRabbit
public class RabbitApplication implements RabbitListenerConfigurer {

public static void main(String[] args) {
    SpringApplication.run(RabbitApplication.class, args);
}

@Bean


public MappingJackson2MessageConverter jackson2Converter() {
        MappingJackson2MessageConverter converter = new  MappingJackson2MessageConverter();
        return converter;
    @Bean
public SimpleRabbitListenerContainerFactory myRabbitListenerContainerFactory() {
      SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
      factory.setConnectionFactory(rabbitConnectionFactory());
      factory.setMaxConcurrentConsumers(5);
      factory.setMessageConverter((MessageConverter) jackson2Converter());
      factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
      return factory;
    }

@Bean
public ConnectionFactory rabbitConnectionFactory() {
    CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
    connectionFactory.setHost("localhost");
    return connectionFactory;
}

@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
    registrar.setContainerFactory(myRabbitListenerContainerFactory());
}

@Autowired
private EventReceiver receiver;
}
}

Jede Hilfe wird sehr geschätzt, wie die Anpassung manuelle Kanal-Bestätigung zusammen mit den oben genannten Stil der Konfiguration.
Wenn wir implementieren die ChannelAwareMessageListener dann die onMessage-Signatur ändern.
Können wir implementieren ChannelAwareMessageListener auf einen Dienst ?

  • Die Frage, warum Sie selbst dies tun müssen. Wenn Ihr code ist wie in der Antwort unten (lehne auf Fehler, ansonsten ack), der container wird automatisch für Sie mit AUTO-ack-Modus - wenn der Hörer löst eine exception aus, wird die Nachricht abgelehnt werden; andernfalls acked.
InformationsquelleAutor Guru | 2016-08-02
Schreibe einen Kommentar