MQ的发布订阅模式(fanout)

本文介绍了MQ的发布订阅模式,通过Java实现fanout交换机的生产和消费。生产者指定fanout交换机发送消息,消费者创建临时队列并绑定到交换机,实现消息的广播。内容包括生产者、消费者代码示例,以及作者的个人经历和学习资源分享。

//创建临时队列

String queueName = channel.queueDeclare().getQueue();

MQ的发布订阅模式(fanout)

直接执行肯定报错的:明显告诉我们队列名不要用amq来命名,所以可以将代码稍微改造下

MQ的发布订阅模式(fanout)

channel.queueDeclare(“dy”+queueName,false,false,false,null);

MQ的发布订阅模式(fanout)

了解了交换机之后,我们就可以正式开始发布订阅模式啦~

一、生产者

=====

尽量在生产者指定交换机,毕竟按照正常逻辑来看,肯定是先发送,才能接受。否则的话接受了个寂寞哦~

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);

}

}

MQ的发布订阅模式(fanout)

由此可见

  • 创建了一个生产者

  • 建立了一个交换机Name= fanout_pattern

  • 交换机的类型是 fanout(扇型)

二、消费者

=====

消费者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等待接受消息~

MQ的发布订阅模式(fanout)

两个消费者的申明的临时队列成功绑定到了交换机上!

执行结果

生产者

MQ的发布订阅模式(fanout)

消费者A

MQ的发布订阅模式(fanout)

消费者B

MQ的发布订阅模式(fanout)

生产者给交换机发了一条消息。

两个消费者都收到了消息。

三、总结

====

MQ的发布订阅模式(fanout)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题

注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

互联网工程师必备的面试1000题

而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题

[外链图片转存中…(img-G9lYn5kd-1713475073233)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值