游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

RabbitMQ发布订阅模式

  将向多个消费者传递一条消息。这种模式被称为发布订阅。
  使用fanout的exchanger,默认会忽略routingkey的值。fanout类型的exchanger,会将所有接收到的消息发给所有绑定到此exchanger上的所有队列。一般情况下,此时我们声明的队列,都会将是临时队列,因为它不需要名称,所以可以直接使用queueDeclare()不需要传递任何的参数即可以创建一个临时队列。注意,如果在没有任何队列绑定到fanout交换器时,生产者就发出消息,则消息将直接丢弃。纯java项目生产者代码
  注意,以下虽然将交换器设置为持久的,但如果它在发布数据时,没有任何的队列绑定到此交换器上,则消息依然会被直接丢弃。
  packagewj。rabbitmq。fanout;
  importcom。rabbitmq。client。BuiltinExchangeType;
  importcom。rabbitmq。client。Channel;
  importcom。rabbitmq。client。Connection;
  importcom。rabbitmq。client。MessageProperties;
  importwj。mq。utils。ConnUtils;
  publicclassFanoutSender{
  publicstaticvoidmain(String〔〕args)throwsException{
  ConnectionconnectionConnUtils。newConnection();
  Channelchannelconnection。createChannel();
  声明扇出类型的交换器
  finalStringexchangeMyFanOut;
  channel。exchangeDeclare(exchange,
  BuiltinExchangeType。FANOUT,
  true);
  直接发布信息
  for(inti0;i10;i){
  StringmsgCi;
  routingKey对fanout类型的交换器无任何意义,有或没有都相同
  只有在发送时所有绑定到此fanout的queue才可以收到信息
  另外,即使设置了消息的持久化,此消息也不会被持久
  因为没有任何一个routingKey名为
  channel。basicPublish(exchange,,
  MessageProperties。PERSISTENTTEXTPLAIN,
  msg。getBytes());
  }
  channel。close();
  connection。close();
  System。err。println(信息发送完成);
  }
  }
  截图:
  消费者代码
  packagewj。rabbitmq。fanout;
  importcom。rabbitmq。client。;
  importwj。mq。utils。ConnUtils;
  publicclassFanoutReciver{
  publicstaticvoidmain(String〔〕args)throwsException{
  ConnectionconnectionConnUtils。newConnection();
  Channelchannelconnection。createChannel();
  随机声明一个队列exclusivetrue,autoDeltrue
  Stringqueuechannel。queueDeclare()。getQueue();
  StringexchangeMyFanOut;
  绑定关系
  channel。queueBind(queue,exchange,);
  DeliverCallbackmsgCallBack(consumerTag,message){
  System。err。println(收到信息:newString(message。getBody()));
  };
  channel。basicConsume(queue,true,msgCallBack,consumerTag{
  });
  }
  }
  截图:
  运行效果
  多次启动消费者,然后再启动生产者发送信息,多个消息者都可以接收到信息。SpringBoot项目
  由于一般情况下,生产者与消费者都是分开的,所以,这儿为了模拟这个过程,声明了两个不同的配置对象,一个专门用于生产者(SenderConfig),一个专门用于消费者(ReceiverConfig)。
  为了查看结果,将其中的一个消费者处理消息的能力设置的比较慢。用于查看是否所有消费者都接收到了相同的信息。开发消费者配置类
  此配置文件主要功能是:配置两个队列不同的消费者使用不同的队列消费消息。配置一个交换器fanout类型的。配置两个Binding对象,用于将两个队列全部的绑定给这个fanout的交换器。
  packagewj。mq。config。fanout;
  importjava。util。HashMap;
  importjava。util。Map;
  importorg。springframework。amqp。core。AnonymousQueue;
  importorg。springframework。amqp。core。Binding;
  importorg。springframework。amqp。core。BindingBuilder;
  importorg。springframework。amqp。core。FanoutExchange;
  importorg。springframework。amqp。core。Queue;
  importorg。springframework。context。annotation。Bean;
  importorg。springframework。context。annotation。Configuration;
  接收者配置类
  因为在正式的开发中,要吗有接收者配置,要吗有发布者的配置,所以将这两个配置分开
  Configuration
  publicclassReceiverConfig{
  声明队列,因为是与fanout类型的交换机绑定,所以不需要名称
  Bean
  publicQueuereceiverQueue1(){
  MapString,ObjectargsnewHashMap();
  args。put(name,Test);
  QueuequeuenewAnonymousQueue(args);
  returnqueue;
  }
  声明第二个任意名称的队列
  return
  Bean
  publicQueuereceiverQueue2(){
  MapString,ObjectargsnewHashMap();
  args。put(name,Test);
  QueuequeuenewAnonymousQueue(args);
  returnqueue;
  }
  声明fanout交换机
  Bean
  publicFanoutExchangereceiverExchange(){
  returnnewFanoutExchange(FanoutExchange,true,false);
  }
  声明绑定关系
  Bean
  publicBindingreceiverBinding1(QueuereceiverQueue1,FanoutExchangereceiverExchange){
  BindingbBindingBuilder。bind(receiverQueue1)。to(receiverExchange);
  returnb;
  }
  声明绑定关系
  Bean
  publicBindingreceiverBinding2(QueuereceiverQueue2,FanoutExchangereceiverExchange){
  BindingbBindingBuilder。bind(receiverQueue2)。to(receiverExchange);
  returnb;
  }
  }
  截图:
  消费者
  使用RabbitListener注解声明两个消费者
  packagewj。mq。rabbitmq。pubsub;
  importorg。springframework。amqp。core。Message;
  importorg。springframework。amqp。rabbit。annotation。RabbitListener;
  importorg。springframework。messaging。handler。annotation。Payload;
  importorg。springframework。stereotype。Component;
  importcom。rabbitmq。client。Channel;
  importcn。hutool。core。thread。ThreadUtil;
  importlombok。extern。slf4j。Slf4j;
  Slf4j
  Component
  publicclassPubsubReceiver{
  RabbitListener(queues{receiverQueue1。name})
  publicvoidcusumer1(Stringmsg){
  log。info(消费者1,接收到:{},msg);
  }
  RabbitListener(queues{receiverQueue2。name})
  publicvoidcusumer2(Payload()Messagemessage,Channelchannel)throwsException{
  ThreadUtil。sleep(1000);
  StringstrnewString(message。getBody());
  log。info(消费者2,接收到:{},str);
  对于扇出类型的消息,不需要确认,因为没有routingkey,且队列也是随机的
  Longidmessage。getMessageProperties()。getDeliveryTag();
  channel。basicAck(id,false);
  }
  }
  截图:
  声明生产者配置类
  生产者发布消息,只需要一个交换器
  packagewj。mq。config。fanout;
  importorg。springframework。amqp。core。Exchange;
  importorg。springframework。amqp。core。FanoutExchange;
  importorg。springframework。context。annotation。Bean;
  importorg。springframework。context。annotation。Configuration;
  Configuration
  publicclassSenderConfig{
  Bean
  publicExchangesenderExchange(){
  returnnewFanoutExchange(FanoutExchange,true,false);
  }
  }
  截图:
  声明生产者
  这儿并没有使用调度功能,通过手动的调用send功能,来发布信息
  packagewj。mq。rabbitmq。pubsub;
  importorg。springframework。amqp。core。Exchange;
  importorg。springframework。amqp。rabbit。core。RabbitTemplate;
  importorg。springframework。beans。factory。annotation。Autowired;
  importorg。springframework。beans。factory。annotation。Qualifier;
  importorg。springframework。stereotype。Component;
  Component
  publicclassPubsubSender{
  Autowired
  privateRabbitTemplaterabbitTemplate;
  Autowired
  Qualifier(senderExchange)
  privateExchangesenderExchange;
  publicvoidsend(){
  for(inti1;i10;i){
  Stringmsgi;
  rabbitTemplate。convertAndSend(senderExchange。getName(),,msg);
  }
  }
  }
  截图:
  开发ApplicationRunner
  此类用于在程序启动完成后,调用send函数,发送数据。
  packagewj。mq。config。runner;
  importorg。springframework。beans。factory。annotation。Autowired;
  importorg。springframework。boot。ApplicationArguments;
  importorg。springframework。boot。ApplicationRunner;
  importorg。springframework。context。annotation。Configuration;
  importlombok。extern。slf4j。Slf4j;
  importwj。mq。rabbitmq。pubsub。PubsubSender;
  Slf4j
  Configuration
  publicclassAppRunnerimplementsApplicationRunner{
  Autowired
  privatePubsubSenderpubsubSender;
  Override
  publicvoidrun(ApplicationArgumentsargs)throwsException{
  log。info(程序启动完成);
  pubsubSender。send();
  }
  }
  截图:
  启动程序
  启动程序,查看后台输出的数据,虽然消费者2处理的能力比较慢,但也同样接收到了所有的信息,因为在fanout这种交换机器,会将所有消息发送给所有绑定到这个交换器的队列,且会自动忽左忽略routingkey。

战神蚩尤传世归来法师全部技能预览(下)法师有哪些技能(二)大家好,欢迎来到【小磕传世手游】今天小编想跟小伙伴们继续分享经典传世手游法师职业的技能介绍,上一期已经介绍了15个法师普通技能这一期我们来分享剩下的法师技能。感兴趣的小伙伴那就……在清迈,我只想躺平JungledeCafe咖啡馆,在清迈的小伙伴们应该都去过。这家网红咖啡馆,在清迈有多家分店。今天给大家介绍的是位于湄登县(MaeTaeng)的分店JungleDeCafeKu……皮肤科医生常见3种食物,你若爱吃,皱纹滋生,人显老每个女性都希望自己拥有不老的颜值,胶原蛋白对于每个女性朋友来讲都是非常重要的,因为胶原蛋白的含量关乎到每个女性衰老的速度和肌肤维持的情况,随着年龄的增长,体内的胶原蛋白会逐渐的……2023年CES十大汽车新闻及趋势一年一度的消费电子展(CES)于今年1月5日至8日在拉斯维加斯举行,主要关注汽车、物联网、智能家居、医疗保健、元宇宙和XR、人工智能和计算领域。Counterpoint的汽车团……眼光要放得长远!目前一步到位买这3款旗舰机,用四五年很轻松千元机虽然价格便宜,而且品质也要比以前高很多,但是相比旗舰机而言仍然存在较大的差距,比如性能、屏幕和拍照,所以把眼光放得远一些,目前这3款旗舰手机可以一步到位闭眼买,用四五年很……天文奇象11月8日白天将上演月掩金星,晚上金星合月据新华社报道,11月8日,金星和月球将会一起上演难得一见的天文现象。11月8日白天将会发生月掩金星,当天晚上则会上演金星合月。天文奇象:11月8日白天将上演月掩金星……你以为我发现火星生命了,其实我还不确定周一知古通今周二牧夫专栏周三太空探索周四观测指南周五深空探测周六茶余星话周日视频天象翻译:葛文迪校对:牧夫校对组编排:陶邦惠后台:库特莉亚芙……CCTV5直播!辽宁VS广厦仍有悬念许钟豪一打五杨鸣或40致CBA联赛目前已经结束了半决赛的争夺,辽宁和广厦时隔四年之后再次会师总决赛,值得一提的是,这两支球队在今年的季后赛当中五战全胜,辽宁队横扫山西和广东,而广厦则完爆吉林和上海。……随机投票小程序投票帮手小程序小程序发起投票投票计分小程序关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用活动星投票小程序来进行投票。我们现在要以科普演讲为主题进行一次投票活动,我们可以在在微……35岁的郑欣宜,终于继承了老妈的遗产今年,肥姐沈殿霞的女儿郑欣宜35岁了,她终于有权利继承她老妈的遗产。2008年,沈殿霞弥留之际,给女儿留下了6000万遗产,但前提是要等到郑欣宜35岁才可以动用这笔钱。很……元宵剧透!闽侯这些地方有活动!LANTERNFESTIVAL元宵佳节农历正月十五元宵节就要到啦!闽侯多地为您准备了各种各样、丰富有趣的元宵节活动邀您一起欢乐闹元宵一……肝火心火肺火胃火肾火,5种上火类型实用中成药分享上火是一个大家经常讨论的话题,尤其是最近进入秋天了,天气比较干燥,很多人特别容易上火,今天就来和大家分享一下咱们的五脏上火,都可以用哪些中成药。首先咱们来说肝火,肝火分为……
微信macOS版v2。3。29正式版更新支持IPv6IT之家12月4日消息据IT之家网友反馈,今天微信forMac迎来了版本号为2。3。29的正式版更新,此次更新主要是新增支持IPv6,修复了一些已知问题。在此前的微信ma……中国联通向iPhone用户发短信提醒升级iOS13。3开启4感谢IT之家网友古筝王子的线索投递!IT之家12月23日消息12月11日,苹果向iPhone用户推送了iOS13。3正式版更新,随后中国联通向苹果iPhone用户推送了运……中国联通手机营业厅App正式上线5G网络覆盖实时查询感谢IT之家网友古筝王子的线索投递!IT之家9月24日消息近期,中国联通手机营业厅客户端App迎来新版本v6。2。1更新,支持5G网络覆盖实时查询,快来看看你身边是否有了……苹果确认新MacPro将在美国得州生产IT之家9月24日消息今年6月,苹果在WWDC19全球开发者大会上正式发布了新一代MacPro。今日,苹果官方正式宣布,全新MacPro将在美国得克萨斯州奥斯汀的一家工厂生产。……苹果AppleTV拿下脱口秀女王奥普拉读书俱乐部节目据国外媒体报道,脱口秀女王奥普拉温弗瑞(OprahWinfrey)将把她著名的读书俱乐部节目带到苹果新的流媒体订阅服务AppleTV上。苹果公司今日宣布,将与温弗瑞合作推……比特币能被杀死吗?我本人不算老韭菜,因为我了解比特币的时候已经是2015年,那时候身边的人偶尔有几个在谈论比特币,那时候我也有点好奇就在网上搜索了一下比特币,看了看比特币白皮书,感觉很有趣。……苹果iPhone11Pro跌落测试结果出炉3米玻璃未碎,屏幕IT之家9月23日消息日前,继网友对iPhone11ProMax进行裸机跌落试验后,外媒cnet对苹果iPhone11和iPhone11Pro的跌落测试结果也已出炉。cn……Steam生存游戏节10款耐玩的游戏推荐,游戏世界的逻辑性也岁月飞逝,8月份已经到来了,而8月2日Steam游戏平台就给玩家们带来了一个大惊喜,那就是Steam生存节,在这一次节日里,下面这10款优秀的作品很可能会降到历史底价,有热爱游……库克回应川普要求苹果iPhone加回Home键我会给他演示滑IT之家11月21日消息11月20日,库克在接受采访时回应了川普要求在iPhone上加回Home键的要求。库克笑称,FaceID受到很多人的喜爱,希望能够花点时间给他演示一下如……如果宇宙真的诞生于138亿年前,那在139亿年之前,又存在着综述起源的追溯仿佛是一个没有尽头的问题,万物皆有起源,而起源之前的情况大概又是另一番论证了。就像是人类了解了地球的形成,就一定会追溯到太阳系、银河系,乃至宇宙的起源……vivoXFlip长这样?新机现身Geekbench颜值也太【手机中国新闻】几年前,只有三星、华为等少数手机厂商推出了折叠屏手机。但随着手机技术的发展,近两年国内主流手机厂商几乎都具备了量产折叠屏手机的能力,已经带来了各种折叠屏旗舰。不……专注开发者,苹果WWDC应用更名为AppleDevelopeIT之家11月19日消息一直以来,苹果始终在iOS平台提供官方WWDC应用程序。开发人员可以通过这款应用观看每年全球开发者大会实时视频和录制视频,还能够在参加大会现场活动的同时……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网