Я пытаюсь настроить обмен темы на моем приложении весны. Вот моя конфигурация контекста:Spring и AMQP RabbitMQ обмен темы не работает
@Configuration
public class IntegrationConfig {
public final static String queueName = "my-queue";
@Bean
AmqpAdmin amqpAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
@Bean
Queue queue() {
return new Queue(queueName);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("my-exchange", false, true);
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with("ru.interosite.*");
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
ImageUploadReceiver receiver() {
return new ImageUploadReceiver();
}
@Bean
MessageListenerAdapter listenerAdapter(ImageUploadReceiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
Это класс приемника:
public class ImageUploadReceiver {
private CountDownLatch latch = new CountDownLatch(1);
public void receiveMessage(String message) {
System.out.println("Received ");
latch.countDown();
}
public CountDownLatch getLatch() {
return latch;
}
}
Это код отправителя:
@RequestMapping("/sendmessage")
@ResponseBody
public String sendMessage() {
rabbitTemplate.convertAndSend("ru.interosite.1", "ttt1233");
try {
imageUploadReceiver.getLatch().await(3, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Msg received";
}
Так я отправляю сообщение на тему обмен с помощью связывания ключа " ru.interosite.1 "в очередь, связанную с шаблоном" ru.interosite. * ". Я использовал этот ключ и шаблон, когда попробовал образец от https://www.rabbitmq.com/tutorials/tutorial-five-java.html, и они отлично работали.
Но внутри строки AMQP это не работает, т. Е. Приемник никогда не вызывается. Он называется только если ключ привязки и шаблон полностью совпадают, как если бы я использовал DirectExchange.
Я что-то упустил?
Большое вам спасибо! Конечно, я должен был догадаться, что этот шаблон не знает имя обмена. – Cyrusmith