work模式
竞争模式就是两个队列竞争者去消费生产者的消息,通过轮询的方式去消费消息
work模式的使用
1:声明生产者
发送需要处理的消息,通过生产者产生消息。
@Component
public class WorkProduct {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(String msg){
System.out.println("workProduce"+msg);
rabbitTemplate.convertAndSend("workQueue",msg);
}
}
2:声明对列
通过队列去接受生产者产生的消息。
@Bean
public Queue workQueue(){
return new Queue("workQueue");
}
3:声明消费者
消费者通过竞争的模式去处理生产者产生的消息。
@Component
public class WorkConsume {
/**
* 消费队列中消息中方法
*/
@RabbitListener(queues = "workQueue")
public void reviceA(String msg){
System.out.println("消费者接收到的消息A:"+msg);
}
@RabbitListener(queues = "workQueue")
public void reviceB(String msg){
System.out.println("消费者接收到的消息B:"+msg);
}
}
广播模式
通过交换机使队列接收到消息
广播模式的使用
1:声明生产者
@Component
public class FanoutProduct {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(String msg){
rabbitTemplate.convertAndSend("fanoutExchange",null,msg);
}
}
2:交换机和队列的声明
并且实交换机与队列进行绑定32
/**
* 广播模式
* 成员:一个生产者 , 一个交换机, 两个队列,两个消费者
*/
@Bean
public Queue fanoutQueueA(){
return new Queue("fanoutQueueA");
}
@Bean
public Queue fanoutQueueB(){
return new Queue("fanoutQueueB");
}
@Bean
public FanoutExchange fanoutExchange(){
return new FanoutExchange("fanoutExchange");
}
/**
* 绑定交换机与队列
*/
@Bean
public Binding fanoutQueueAToFanoutExchange(Queue fanoutQueueA,
FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutQueueA).to(fanoutExchange);
}
@Bean
public Binding fanoutQueueBToFanoutExchange(Queue fanoutQueueB,
FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutQueueB).to(fanoutExchange);
}
3:消费者的声明
@Component
public class FanoutConsume {
@RabbitListener(queues = "fanoutQueueA")
public void reviceA(String msg){
System.out.println("fanoutQueueA:"+msg);
}
@RabbitListener(queues = "fanoutQueueB")
public void reviceB(String msg){
System.out.println("fanoutQueueB:"+msg);
}
}