@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) ) ;
}