1 RabbitMQ处理消息的流水线
生产者 --> 交换器 --> (路由) --> 队列
2 RabbitMQ的交换模式
fanout
direct
topic
header
性能比较:
fanout > direct >> topic > header
推荐使用fanout,fanout模式要手动配置交换器、队列
3 本章只讲fanout和direct两种交换模式的的搭建
3.1 fanout (广播模式)
这种交换模式的特点:
a、一个交换器 可以被多个队列绑定
b、这种模式需要手动创建交换器、队列,并手动绑定
c、队列直接绑定交换器,不需要路由器(即 路由键)做桥梁
d、先启动声明消费者,再启动声明生产者。否则先启动生产者的话,exchange接到消息后发现没有队列对它感兴趣,就任性的把消息给丢掉。
实现:
1、搭建mq控制台
2、手动创建交换器exchange_VC、队列queue_VC,并将队列绑定交换器
3、java实现:
编写消息的生产者
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
@Slf4j
public class Producer{
public void sendMsg(String event) {
//New一个RabbitMQ的连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置需要连接的RabbitMQ地址,这里指向本机
factory.setHost("localhost");
try {
//尝试获取一个连接
Connection connection = factory.newConnection();
//尝试创建一个channel
Channel channel = connection.createChannel();
//声明交换器(参数为:交换器名称; 交换器类型,广播模式)
channel.exchangeDeclare("fanoutLogs", BuiltinExchangeType.FANOUT);
//消息发送给交换器(参数为:交换器名称, routingKey, 事件)
channel.basicPublish("交换器名称","", null,event.getBytes());
log.info("发送成功消息到交换器");
channel.close();
connection.close();
} catch (IOException |TimeoutException e) {
e.