RabbitMQ手动绑定多个指定路由

@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"));
	//交换机和队列绑定,并绑定Routing key
	amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange","routing-key",null));
}

你可能感兴趣的:(SpringBoot)