Похоже, что очень немногие используют Spring AMQP M1, поэтому я отвечу на свой вопрос тем, что я сделал.
В конструкторе производителя объявляю обмен. Затем установите обмен на шаблоне Rabbit. Я также установил ключ маршрутизации на RabbitTemplate в качестве имени очереди, но это не обязательно, но это был маршрут, который я бы использовал.
@Service("userService")
public class UserService {
private final RabbitTemplate rabbitTemplate;
@Autowired
public UserService(final RabbitAdmin rabbitAdmin,
final Exchange exchange,
final Queue queue,
@Qualifier("appRabbitTemplate") final RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
rabbitAdmin.declareExchange(exchange);
rabbitTemplate.setExchange(exchange.getName());
rabbitTemplate.setRoutingKey(queue.getName());
}
public void createAccount(final UserAccount userAccount) {
rabbitTemplate.convertAndSend("Hello message sent at " + new DateTime());
}
}
В конструкторе потребителя я объявляю очередь и создаю привязку.
public class Consumer implements ChannelAwareMessageListener<Message> {
public Consumer(final RabbitAdmin rabbitAdmin, final Exchange exchange, final Queue queue) {
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareBinding(BindingBuilder.from(queue).to((DirectExchange) exchange).withQueueName());
}
@Override
public void onMessage(Message message, Channel channel) throws Exception {
System.out.println(new String(message.getBody()));
channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);
}
}
Хотя конструкторы могут запускаться много раз, RabbitMQ объявляет обмен, очередь и привязки только один раз.
Если вам нужен весь источник для этого небольшого примера проекта, спросите, и я его где-нибудь выложу.