设为首页 收藏本站
查看: 1342|回复: 0

[经验分享] Spring集成RabbitMQ-必须知道的几个概念

[复制链接]

尚未签到

发表于 2017-12-8 21:36:12 | 显示全部楼层 |阅读模式
  上篇《Spring集成RabbiMQ-Spring AMQP新特性》我们了解了最新spring-rabbit的2.0.0.M5版本相较于之前有哪些变化。其实使用Spring-amqp确实简单,其主要就一些jar包,比如spring-amqp,spring-rabbit等。这篇就通过几个基本概念来了解下Spring amqp和原生amqp在用法上有何不同。
消息体
  在《RabbitMQ入门》系列中,我们如果要发送一条消息,都是转成字节数组的,类似这样
  channel.basicPublish("", QUEUE_NAME, null, "hello world".getBytes());
  但是在spring-amqp中,定义了一个消息类,用于存储消息实体和消息的属性信息。下面是该类的成员变量和方法
DSC0000.jpg


  •   getBody就是获取消息体的内容,相当于上面的“hello world”
  •   getMessageProperties可以得到有关消息本身的属性信息,比如messageId消息的id标识,timestamp时间戳等等的值
  •   使用这将上面属性的值通过setHeader(String key, Object value)方法添加到消息类中
Exchange
  读过《RabbitMQ入门》系列,想必对于Exchange应该就不会陌生。在RabbitMQ是实际上所有的消息都不是生产者直接送到消费者,而是需要经过一道Exchange。Exchange接收发送者发送的消息,并根据定好的路由规则将消息派发到相应的队列Queue中去,最终被消息者消费。
  在原生的RabbitMQ中,我们通过类似这样的语句来指定需要使用哪种Exchange类型
  channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
  显然,这里声明的是Fanout的exchange模式。同时,我们注意到这里并没有一个与Exchange直面相关的类,来设置响应的属性。
  在spring-amqp中,就针对Exchange单独定义了一个接口Exchange。
DSC0001.jpg


  •   通过方法名,我们就很清楚知道每个方法是干什么的,比如isDurable用于判定是否持久化了
  •   getType方法用于得到该Exchange是那种类型,前面我们已经说过,Exchange的类型主要有Direct、Fanout、Topic和Headers四种,相应的,也有四个实现类集成了接口Exchange,他们分别是DirectExchange、FanoutExchange、TopicExchange和HeadersExchange
  下面我们看看DirectExchange和Exchange的关系
DSC0002.jpg


  • 这四个实现类都是继承了抽象类AbstractExchange,而AbstractExchange也是Exchange的子类。
  • DirectExchange的源码如下,我们可以看到其复写了getType方法,并赋值为ExchangeTypes.DIRECT
Queue
  Queue是用来存储消息的,消费者从这里拿走消息并消费。与上面提到的Exchange类似,Spring-amqp中也是通过一个类Queue来定义了队列。
DSC0003.jpg


  •   Queue有多种重载形式的构造函数,可以设置queue的名称,是否持久化,是否自动删除等等
  •   有一些判断的函数,比如是否持久化了,是否设置了自动删除等
Binding
  我们应该还记得在原生的RabbitMQ中,Fanout模式下是如何绑定Exchange和Queue的
  channel.queueBind(queueName, EXCHANGE_NAME, "");
  在Spring-amqp中,即使是绑定映射,也单独创建了一个类Binding
DSC0004.jpg


  •   对于构造函数,后面我们通过几个例子就可以知道每个参数表示的含义
  •   提供了一些函数用户获取绑定两端Exchange和Queue的基本信息
  Direct模式的绑定
  new Binding(someQueue, someDirectExchange, "foo.bar")
  Fanout模式的绑定
  new Binding(someQueue, someFanoutExchange)
  Topic模式的绑定
  new Binding(someQueue, someTopicExchange, "foo.*")
  ​
  如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。
DSC0005.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-422269-1-1.html 上篇帖子: MAPISession(EventID9646-MS-ExchangeIS) 下篇帖子: rabbitmq配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表