MQ的发布订阅模式(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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值