这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战markdown
RabbitMQ系列汇总:RabbitMQ系列工具
回顾一下简单模式和工做模式post
如今来介绍一下交换机是干吗的测试
RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,一般生产 者甚至都不知道这些消息传递传递到了哪些队列中。spa
相反,生产者只能将消息发送到交换机(exchange),交换机工做的内容很是简单,一方面它接收来 自生产者的消息,另外一方面将它们推入队列。交换机必须确切知道如何处理收到的消息。code
是应该把这些消 息放到特定队列仍是说把他们到许多队列中仍是说应该丢弃它们。这就的由交换机的类型来决定。orm
交换机共有四种类型队列
这里须要讲下无名交换机,也就是默认交换机,先前的几篇文章咱们都没有指定交换机路由
还有东西叫临时队列字符串
//建立临时队列
String queueName = channel.queueDeclare().getQueue();
复制代码
channel.queueDeclare("dy"+queueName,false,false,false,null);
复制代码
了解了交换机以后,咱们就能够正式开始发布订阅模式啦~
尽可能在生产者指定交换机,毕竟按照正常逻辑来看,确定是先发送,才能接受。不然的话接受了个寂寞哦~
public static void publishMessageIndividually() throws Exception {
//工具类获取通道
Channel channel = RabbitMqUtils.getChannel();
/**
* 指定交换机和模式
* 参数一:指定的交换机名称
* 参数二:指定的交换机模式
*/
channel.exchangeDeclare(ChangeNameConstant.FANOUT_MODEL,"fanout");
Scanner sc = new Scanner(System.in);
System.out.println("请输入信息");
while (sc.hasNext()) {
String message = sc.nextLine();
channel.basicPublish(ChangeNameConstant.FANOUT_MODEL, "20210804", null, message.getBytes("UTF-8"));
System.out.println("生产者发出消息" + message);
}
}
复制代码
因而可知
消费者A
/**
* 这是一个测试的消费者
*@author DingYongJun
*@date 2021/8/1
*/
public class DyConsumerTest_Fanout01 {
public static void main(String[] args) throws Exception{
//使用工具类来建立通道
Channel channel = RabbitMqUtils.getChannel();
/**
* 生成一个临时的队列 队列的名称是随机的
* 当消费者断开和该队列的链接时 队列自动删除
*/
String queueName = channel.queueDeclare().getQueue();
//把该临时队列绑定咱们的 exchange 其中 routingkey(也称之为 binding key)为空字符串
channel.queueBind(queueName, ChangeNameConstant.FANOUT_MODEL, "20210804");
System.out.println("交换机A等待接收消息,把接收到的消息打印在屏幕.....");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println("控制台打印接收到的消息"+message);
};
channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {
System.out.println("消息中断了~");
});
}
}
复制代码
消费者B代码同样,只是改为消费者B等待接受消息~
两个消费者的申明的临时队列成功绑定到了交换机上!
执行结果
生产者给交换机发了一条消息。
两个消费者都收到了消息。
路漫漫其修远兮,吾必将上下求索~
若是你认为i博主写的不错!写做不易,请点赞、关注、评论给博主一个鼓励吧~hahah