当前位置: 首页 > java >正文

【Fifty Project - D32】

今日完成记录

TimePlan完成情况
12:00 - 17:30小论文2
17:30 - 18:30羽毛球
19:30 - 21:30继续RabbitMQ学习
21:30 - 22:30打球
22:30 - 23:00记录

短暂的写小论文时间又让我感受到了极致的窒息感,可能是拖延症DDL临近的压迫感吧QAQ,真的搞不来一点科研
今天的羽毛球打的很快乐,感觉对双打多了一点点理解,估计是这几天刷到的萝卜的视频啥的太多了还有邪恶老大爷hhhh
虽然明天老板请客吃饭很开心,但是为了吃这顿饭改签花了200QAQ,太贵了这顿饭哇

RabbitMQ

声明队列和交换机

前面学习了如何使用控制台新建队列和交换机,然而在实际操作中,如果都使用控制台操作,那么需要有一个文件来记录队列和交换机情况,在其他机器部署代码需要在控制台逐一创建队列,属实麻烦。因此SpringAMQP提供了基于配置和基于注解的队列、交换机声明方式

基于配置的队列和交换机声明

这个方法的核心是用JavaBean的方式管理创建的队列和交换机,有两种新建对象的方法,一种是直接new,一种是使用工厂模式创建。
不管使用哪种方法,都需要创建三个对象,Queue消息队列, Exchange交换机, Binding绑定关系。代码如下

@Configuration
public class FanoutConfiguration {@Beanpublic FanoutExchange fanoutExchange1(){// 直接newreturn new FanoutExchange("df.fanout1");//使用交换机工厂创建
//        return ExchangeBuilder.fanoutExchange("df.fanout").build();}@Beanpublic Queue fanoutQueue1(){return new Queue("df.fanout.queue1");
//        return QueueBuilder.durable("fanout.queue1").build();}@Beanpublic Queue fanoutQueue2(){return new Queue("df.fanout.queue2");
//        return QueueBuilder.durable("fanout.queue1").build();}@Beanpublic Binding fanoutBinding3(){return BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange1());}@Beanpublic Binding fanoutBinding4(){return BindingBuilder.bind(fanoutQueue2()).to(fanoutExchange1());}}

这种方式的弊端在于,如果创建订阅型交换机,那么每个key需要创建一个binding,如下:一个消息队列绑定一个direct exchange的三个key就需要绑定三个binding,这将使得代码量急剧上升。

@Configuration
public class DirectConfiguration {@Bean public DirectExchange directExchange1(){return new DirectExchange("df.direct1");}@Beanpublic Queue directQueue1(){return new Queue("df.direct.queue1");}@Beanpublic Binding directExchange1Queue1BindingRed(){return BindingBuilder.bind(directQueue1()).to(directExchange1()).with("red");}@Beanpublic Binding directExchange1Queue1BindingBlue(){return BindingBuilder.bind(directQueue1()).to(directExchange1()).with("blue");}@Beanpublic Binding directExchange1Queue1BindingYellow(){return BindingBuilder.bind(directQueue1()).to(directExchange1()).with("yellow");}
}

基于注解的队列和交换机声明方式

这种方式写在消费者端,如下

@RabbitListener(bindings = @QueueBinding(key={"blue", "red"},value = @Queue(value="df.direct1.queue1"),exchange = @Exchange(value = "df.direct1", type = ExchangeTypes.DIRECT)))
public void listenDirectQueue1(String msg){System.out.println("消费者3收到了df.direct.queue1的消息:【" + msg +"】");try {Thread.sleep(200);}   catch (InterruptedException e) {}
}
@RabbitListener(bindings = {@QueueBinding(value = @Queue(value = "df.topic.queue1"),exchange = @Exchange(value = "df.topic1", type = ExchangeTypes.TOPIC),key="*.top"),@QueueBinding(value = @Queue(value = "df.topic.queue2"),exchange = @Exchange(value = "df.topic2", type = ExchangeTypes.TOPIC),key="top.*")}
)
public void RabbitMQTopicListener(String msg){System.out.println(msg);
}

在实验中发现,原来topic exchange的通配符,只适用于“.”和“.”之间的整段通配,而不能部分通配,也就是“a.*.b”是合法的,但是"a.*b"是不合法的。因为"*b"通配符在一个单词(“.”和“.”之间的整段)内部使用通配符是不合法的。

消息转换器

  1. 默认消息转换器:默认JDK序列化和反序列化,可读性差、体积大
  2. JSON转换器:可读性强、体积小
    需要引入maven坐标并且在启动类配置一个Bean
@Bean
public MessageConverter messageConverter(){// 1.定义消息转换器Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();// 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息jackson2JsonMessageConverter.setCreateMessageIds(true);return jackson2JsonMessageConverter;
}
http://www.xdnf.cn/news/9463.html

相关文章:

  • 工业5.0视域下的医疗AI行业未来发展方向研究
  • TCXO温度补偿振荡器的概述和补偿方法
  • WES(二)——数据预处理
  • 前端使用 spark-md5 实现大文件切片上传
  • 68元开发板,开启智能硬件新篇章——明远智睿SSD2351深度解析
  • 黑马程序员C++核心编程笔记--3 函数高级
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(下)
  • android-studio-2024.3.2.14如何用WIFI连接到手机(给数据线说 拜拜!)
  • git push Git远端意外挂断
  • 代码随想录算法训练营第60期第五十天打卡
  • LVS的DR模式部署
  • C++23:std::print和std::println格式化输出新体验
  • 沉浸式 VR 汽车之旅:汽车虚拟展厅与震撼试驾体验
  • Python编程8——面向对象编程3
  • 前端面经 React 组件常见的声明方式
  • 从零开始搞个简易分布式部署环境
  • 封装一个小程序选择器(可多选、单选、搜索)
  • 使用 Syncfusion 在 .NET 8 中生成 PDF/DOC/XLS/PPT
  • IPMI SOL (Serial over LAN) 排错与配置手册
  • DNS解析过程以及使用的协议名称
  • Redis击穿,穿透和雪崩详解以及解决方案
  • 睡眠分期 html
  • ArcGIS Pro裁剪影像
  • 4.8.4 利用Spark SQL实现分组排行榜
  • 油桃TV v20250519 一款电视端应用网站聚合TV播放器 支持安卓4.1
  • 苍茫命令行:linux模拟实现,书写微型bash
  • 项目代码工程优化之concurrent.futures异步编程(二)
  • 加密协议知多少
  • 【前端】PWA
  • Hadoop复习(二)