J'ai parcouru l'API de RabbitTemplate. Il fournit uniquement la méthode receive qui récupère le message de la file d'attente. Cependant, il n'y a aucun moyen d'obtenir un message avec un identifiant de corrélation particulier. Pouvez-vous s'il vous plaît m'aider à comprendre ce qui me manque ici.Comment recevoir des messages d'un corrélateur de RabbitMQ en utilisant Spring AMQP
Actuellement, j'utilise les API JMS d'ActiveMQ pour recevoir des messages en utilisant le code suivant, lequel createConsumer avec un sélecteur de message. Vous cherchez à faire la même chose avec le printemps AMQP avec RabbitMQ:
private ObjectMessage receiveMessage(final String readQueue, final UUID correlationId, final boolean isBroadcastMessage, final int readTimeout) throws JMSException
{
final ActiveMQConnectionFactory connectionFactory = this.findConnectionFactory(readQueue);
Connection connection = null;
Session session = null;
MessageConsumer consumer = null;
ObjectMessage responseMessage = null;
try
{
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(readQueue);
consumer = session.createConsumer(destination, "correlationId = '" + correlationId + "'");
final Message message = consumer.receive(readTimeout);
}
finally
{
if (consumer != null)
{
consumer.close();
}
if (session != null)
{
session.close();
}
if (connection != null)
{
connection.close();
}
}
return responseMessage;
}
Merci beaucoup Gary – GRaj
Pouvons-nous définir le délai d'attente pour le retour de convertSendAndReceive? Si son délai est dépassé, convertSendAndReceive doit renvoyer une sorte d'exception. – GRaj
Le délai d'attente par défaut est de 5 secondes, ajustez-le avec 'setReplyTimeout (long)' (millisecondes). Si cela expire, vous obtenez une valeur de retour nulle, pas une exception. –