Kanal-shutdown: Kanal-Fehler
manchmal fand ich Folgen Eintrag in meine log-Datei. Ich habe keine Ahnung, was das problem ist. Meine Vermutung ist, zum einstellen einer niedrigeren Anforderung Herzschlag. Irgendwelche anderen Ideen?
Darüber hinaus hatte ich die Situation, dass nach einem Kaninchen neu starten mein server nicht in der Lage war, wieder den Dienst nach dem Kaninchen zurück war. Ich muss neu starten mein server, dass eine erneute Verbindung möglich ist.
[AMQP Connection xxx:5672] [ERROR] org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'xxxx' in vhost 'aaa', class-id=60, method-id=40)
Den Austausch und die Warteschlange nicht automatisch löschen?
public class AmqpConfiguration {
@Autowired
private ConnectionFactory connectionFactory;
@Bean
public Queue receiverQueue() {
return new Queue("receiverQueue", true, false, false, getDeadLetterExchangeArgs());
}
@Bean
public FanoutExchange senderExchange() {
return new FanoutExchange("xxxx");
}
@Bean
public Queue deadLetterQueue() {
return new Queue("deadLetterQueue");
}
@Bean
public FanoutExchange exchangeDeadLetter() {
return new FanoutExchange("deadLetter.exchange");
}
@Bean
public Binding bindDeadLetterQueueToExchange() {
return BindingBuilder.bind(deadLetterQueue()).to(exchangeDeadLetter());
}
@Bean
public Binding bindSenderExchangeToQueue() {
return BindingBuilder.bind(receiverQueue()).to(senderExchange());
}
@Bean(name = { "listenerContainerFactory" })
public SimpleRabbitListenerContainerFactory listenerContainerFactory() {
final SimpleRabbitListenerContainerFactory containerFactory = new SimpleRabbitListenerContainerFactory();
containerFactory.setDefaultRequeueRejected(false);
containerFactory.setConnectionFactory(connectionFactory);
//TODO: set heartbeat
return containerFactory;
}
private Map<String, Object> getDeadLetterExchangeArgs() {
final Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", amqpProperties.getDeadLetterExchange());
return args;
}
}
Cheers,
Dennis
- Sie brauchen, um Ihre Konfiguration - ist die exchange-auto-löschen? Wenn ja, was verwenden Sie zu erklären, wird der Austausch auf die broker?
- Danke für Sie schnelle Antwort, siehe Kommentare im orginal post
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich nicht ein exchange -
xxxx
in der Konfiguration, die Sie zeigte.Vielleicht haben Sie einige gefälschte code senden an, dass der Austausch?
BEARBEITEN
Wenn es ein boot-app, und Sie werden über den amqp-starter, der Kaninchen-Autokonfiguration wird ein admin für dich. Nach einem Neustart des Servers sollten Sie Meldungen wie diese sehen (wenn Sie aktivieren Sie die DEBUG-Protokollierung)...
Admin registriert sich als listener auf der connection factory und immer erklärt die Warteschlangen/- Börsen/- Bindungen, wenn die Verbindung hergestellt ist.
Haben Sie mehrere connection factories/vhosts? Wenn ja, müssen Sie ein admin für jeder - siehe die Abschnitt über bedingte Erklärung.
RabbitAdmin
in Ihrer Konfiguration, das würde automatisch erklären, wenn die Verbindung erstellt wird. Wenn Sie erklären, Sie sich, haben Sie vielleicht eine race-condition.