我浏览了RabbitTemplate的API。它仅提供从队列获取消息的receive方法。但是,无法获取具有特定相关ID的消息。你能帮我理解我在这里缺少的东西吗?
目前,我正在使用ActiveMQ中的JMS API来使用以下代码接收消息,createConsumer带有消息选择器。希望使用RabbitMQ的Spring AMQP做同样的事情:
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;
}
答案 0 :(得分:1)
您在JMS中使用messageSelector
字符串; RabbitMQ / AMQP没有等效物。
相反,每个使用者都有自己的队列,您可以在代理中使用直接或主题交换来进行路由。我建议你看看the tutorials on the rabbitmq web site和topics。
如果您使用correlationId进行请求/回复处理,请考虑使用模板中内置的sendAndReceive
或convertSendAndReceive
方法。有关详细信息,请参阅reference documentation。