rabbitmq fanout java_spring boot整合RabbitMQ(Fanout模式)

1.Fanout Exchange介绍

Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略。

2d7f3811e8dbf1877409e0c447026335.png

如上图所示,即当使用fanout交换器时,他会将消息广播到与该交换器绑定的所有队列上,这有利于你对单条消息做不同的反应。

例如存在以下场景:一个web服务要在用户完善信息时,获得积分奖励,这样你就可以创建两个对列,一个用来处理用户信息的请求,另一个对列获取这条消息是来完成积分奖励的任务。

2.代码示例

1).Queue配置类

FanoutRabbitConfig.java类:

package com.example.rabbitmqfanout;

import org.springframework.amqp.core.Binding;

import org.springframework.amqp.core.BindingBuilder;

import org.springframework.amqp.core.FanoutExchange;

import org.springframework.amqp.core.Queue;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class FanoutRabbitConfig {

//创建队列

@Bean

public Queue AMessage() {

return new Queue("fanout.A");

}

//创建队列

@Bean

public Queue BMessage() {

return new Queue("fanout.B");

}

//创建队列

@Bean

public Queue CMessage() {

return new Queue("fanout.C");

}

//创建Fanout交换器

@Bean

FanoutExchange fanoutExchange() {

return new FanoutExchange("fanoutExchange");

}

//将对列绑定到Fanout交换器

@Bean

Binding bindingExchangeA(Queue AMessage,FanoutExchange fanoutExchange) {

return BindingBuilder.bind(AMessage).to(fanoutExchange);

}

//将对列绑定到Fanout交换器

@Bean

Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {

return BindingBuilder.bind(BMessage).to(fanoutExchange);

}

//将对列绑定到Fanout交换器

@Bean

Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {

return BindingBuilder.bind(CMessage).to(fanoutExchange);

}

}

2).消息生产者

FanoutSender.java类:

package com.example.rabbitmqfanout.rabbitmq;

import org.springframework.amqp.core.AmqpTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

@Component

public class FanoutSender {

@Autowired

private AmqpTemplate rabbitTemplate;

public void send() {

String context = "hi, fanout msg ";

System.out.println("Sender : " + context);

this.rabbitTemplate.convertAndSend("fanoutExchange","", context);

}

}

3).消息消费者

FanoutReceiverA.java类:

package com.example.rabbitmqfanout.rabbitmq;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

@Component

@RabbitListener(queues = "fanout.A")

public class FanoutReceiverA {

@RabbitHandler

public void process(String message) {

System.out.println("fanout Receiver A  : " + message);

}

}

FanoutReceiverB.java类:

package com.example.rabbitmqfanout.rabbitmq;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

@Component

@RabbitListener(queues = "fanout.B")

public class FanoutReceiverB {

@RabbitHandler

public void process(String message) {

System.out.println("fanout Receiver B: " + message);

}

}

FanoutReceiverC.java类:

package com.example.rabbitmqfanout.rabbitmq;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;

import org.springframework.amqp.rabbit.annotation.RabbitListener;

import org.springframework.stereotype.Component;

@Component

@RabbitListener(queues = "fanout.C")

public class FanoutReceiverC {

@RabbitHandler

public void process(String message) {

System.out.println("fanout Receiver C: " + message);

}

}

4).测试

FanoutTest.java类:

package com.example.rabbitmqfanout.rabbitmq;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)

@SpringBootTest

public class FanoutTest {

@Autowired

private FanoutSender sender;

@Test

public void fanoutSender() throws Exception {

sender.send();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值