fanout模式,生产者发送的消息到Exchange,Exchange同时往多个queue发送,多个消费者同时收到各自监听的queue消息

1、安装rabbitmq,pom.xml添加依赖,见之前博文有操作流程

2、添加配置文件,声明两个queue,一个fanoutExchange,然后将queue于Exchange进行绑定

importorg.springframework.amqp.core.Binding;importorg.springframework.amqp.core.BindingBuilder;importorg.springframework.amqp.core.FanoutExchange;importorg.springframework.amqp.core.Queue;importorg.springframework.amqp.rabbit.connection.CachingConnectionFactory;importorg.springframework.amqp.rabbit.connection.ConnectionFactory;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;/***@Author冯战魁*@Date2018/1/12下午2:50*/@ConfigurationpublicclassAmqpConfig{@BeanpublicConnectionFactoryconnectionFactory(){CachingConnectionFactoryconnectionFactory=newCachingConnectionFactory();connectionFactory.setAddresses("127.0.0.1:5672");connectionFactory.setUsername("guest");connectionFactory.setPassword("guest");connectionFactory.setVirtualHost("/");connectionFactory.setPublisherConfirms(true);//必须要设置returnconnectionFactory;}@Bean(name="Amessage")publicQueueAMessage(){returnnewQueue("fanout.A");}@Bean(name="Bmessage")publicQueueBMessage(){returnnewQueue("fanout.B");}@BeanFanoutExchangefanoutExchange(){returnnewFanoutExchange("fanoutExchange");//配置广播路由器}@BeanBindingbindingExchangeA(@Qualifier("Amessage")QueueAMessage,FanoutExchangefanoutExchange){returnBindingBuilder.bind(AMessage).to(fanoutExchange);}@BeanBindingbindingExchangeB(@Qualifier("Bmessage")QueueBMessage,FanoutExchangefanoutExchange){returnBindingBuilder.bind(BMessage).to(fanoutExchange);}}

3、编写生产者方法,发送四条消息

org.springframework.amqp.core.AmqpTemplate;org.springframework.beans.factory.annotation.;org.springframework.web.bind.annotation.;org.springframework.web.bind.annotation.;RabbitSenderController{AmqpTemplate;()fanout(){String[]tasks={,,,};(i=;i<tasks.;i++){Stringcontent=tasks[i];System..println(+content);..convertAndSend(,,content);}}}

4、编写消费者,分别监听两个queue

org.springframework.amqp.rabbit.annotation.;org.springframework.stereotype.;FanoutRabbit{(queues=)processA(Stringstr1){System..println(+str1);}(queues=)processB(Stringstr){System..println(+str);}}

5.执行生产者接口http://localhost:8080/fanout

消费者结果如图所示

可以看到,两个消费者接收到相同的生产者发送的消息


至此fanout模式结束