4.Spring-AMQP

1.Spring AMQP 介绍

1)Spring 封装 RabbitMQ 的时候,它做了什么事情?

Spring AMQP 是对 Spring 基于 AMQP 的消息收发解决方案,它是一个抽象层,不依赖于特定的 AMQP Broker 实现和客户端的抽象,所以可以很方便地替换。

Spring主要完成的事情:1、管理对象(队列、交换机、绑定)  2、封装方法(发送消息、接收消息)

2)Spring AMQP 核心组件

1.ConnectionFactory:Spring AMQP 的连接工厂接口,用于创建连接。CachingConnectionFactory 是ConnectionFactory 的一个实现类。

2.RabbitAdmin:RabbitAdmin 是 AmqpAdmin 的实现,封装了对 RabbitMQ 的基础管理操作,比如对交换机、队列、绑定的声明和删除等。

RabbitAdmin完成基础操作

3.为什么我们在配置文件(Spring)或者配置类(SpringBoot)里面定义了交换机、队列、绑定关系,并没有直接调用 Channel 的 declare 的方法,Spring 在启动的时候就可以帮我们创建这些元数据?

主要是RabbitAdmin,RabbitAdmin 实现了 InitializingBean 接口,里面有唯一的一个方法afterPropertiesSet(),这个方法会在 RabbitAdmin 的属性值设置完的时候被调用(Spring启动)。在 afterPropertiesSet ()方法中,调用了一个 initialize()方法。这里面创建了三个Collection,用来盛放交换机、队列、绑定关系。最后依次声明返回类型为 Exchange、Queue 和 Binding 这些 Bean,底层还是调用了 Channel 的 declare 的方法。

RabbitAdmin

3)Message

1.定义:Message 是 Spring AMQP 对消息的封装。

2.两个重要的属性:body:消息内容。messageProperties:消息属性。

4)RabbitTemplate 消息模板

1.作用:RabbitTemplate 是 AmqpTemplate 的一个实现(目前为止也是唯一的实现),用来简化消息的收发,支持消息的确认(Confirm)与返回(Return)。跟 JDBCTemplate一样,它封装了创建连接、创建消息信道、收发消息、消息格式转换(ConvertAndSend→Message)、关闭信道、关闭连接等等操作。

-----》针对于多个服务器连接,可以定义多个 Template。可以注入到任何需要收发消息的地方使用。

5)MessageListener 消息侦听

1.作用:MessageListener 是 Spring AMQP 异步消息投递的监听器接口,它只有一个方法onMessage,用于处理消息队列推送来的消息,作用类似于 Java API 中的 Consumer

2.MessageListenerContainer:MessageListenerContainer 可以理解为 MessageListener 的容器,一个 Container只有一个 Listener,但是可以生成多个线程使用相同的 MessageListener 同时消费消息。Container 可以管理 Listener 的生命周期,可以用于对于消费者进行配置

3.MessageListenerContainerFactory:Spring 去整合 IBM MQ、JMS、Kafka 也是这么做的。可以在消费者上指定,当我们需要监听多个 RabbitMQ 的服务器的时候,指定不同MessageListenerContainerFactory。

MessageListenerContainerFactory
指定MessageListenerContainerFactory

6)转换器 MessageConvertor

1.作用:RabbitMQ 的消息在网络传输中需要转换成 byte[](字节数组)进行发送,消费者需要对字节数组进行解析。而在 Spring AMQP 中,消息会被封装为 org.springframework.amqp.core.Message对象。MessageConvertor---》用来处理消息的序列化和反序列化,就是处理 Message 的消息体 body 对象

2.MessageConvertor 如何工作?调 用 了 RabbitTemplate 的 convertAndSend() 方 法 时 会 使 用 对 应 的MessageConvertor 进行消息的序列化和反序列化。    序列化:Object —— Json —— Message(body) —— byte[]                    反序列化:byte[] ——Message —— Json —— Object

3.rabbitTemplate 的 convertAndSend()方法:会使用MessageConvertor 进行消息的序列化,默认使用 SimpleMessageConverter。

4.自定义高效地序列化工具:如果我们不想在每次发送消息时自己处理消息,就可以直接定义一个 MessageConvertor。

定义一个 MessageConvertor

5.有哪些 MessageConvertor?在 Spring 中提供了一个默认的转换器:SimpleMessageConverter。Jackson2JsonMessageConverter(RbbitMQ 自带):将对象转换为 json,然后再转换成字节数组进行传递。

6.如何自定义 MessageConverter?例如:我们要使用 Gson 格式化消息:创建一个类,实现 MessageConverter 接口,重写 toMessage()和 fromMessage()方法。 toMessage(): Java 对象转换为 Message   fromMessage(): Message 对象转换为 Java 对象

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容