@Configuration
public class RabbitConfig {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setPort(5672);
cachingConnectionFactory.setUsername("admin");
cachingConnectionFactory.setPassword("admin");
cachingConnectionFactory.setHost("127.0.0.1");
return cachingConnectionFactory;
}
@Bean
public Channel channel(@Autowired ConnectionFactory connectionFactory) throws Exception{
Channel channel = connectionFactory.createConnection().createChannel(false);
channel.queueDelete("TEST_QUEUE");
channel.queueDeclare("TEST_QUEUE",true,false,false,null);
channel.queueBind("TEST_QUEUE","TEST_EXCHANGE","ROUTER01");
channel.queueBind("TEST_QUEUE","TEST_EXCHANGE","ROUTER02");
channel.queueBind("TEST_QUEUE","TEST_EXCHANGE","ROUTER03");
return channel;
}
}
@Component
public class DirectReceiver implements ApplicationRunner {
@RabbitHandler
@RabbitListener(autoStartup = "false",id = "routeId")
public void process(String testMessage) {
System.out.println("Receiver消费者收到消息 : " + testMessage.toString());
}
@Autowired
private RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry;
@Override
public void run(ApplicationArguments args) throws Exception {
AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)rabbitListenerEndpointRegistry.getListenerContainer("routeId");
if (!container.isRunning()){
container.setQueueNames("TEST_QUEUE");
container.start();
}
}
}
还有一种AmqpAdmin动态管理交换机、队列、路由ID
@Autowired
private AmqpAdmin amqpAdmin;
@Test
public void amqpAmindTest() {
amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
amqpAdmin.declareQueue(new Queue("amqpadmin.queue"));
amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange","routing-key",null));
}