上篇《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中,定义了一个消息类,用于存储消息实体和消息的属性信息。下面是该类的成员变量和方法
读过《RabbitMQ入门》系列,想必对于Exchange应该就不会陌生。在RabbitMQ是实际上所有的消息都不是生产者直接送到消费者,而是需要经过一道Exchange。Exchange接收发送者发送的消息,并根据定好的路由规则将消息派发到相应的队列Queue中去,最终被消息者消费。 在原生的RabbitMQ中,我们通过类似这样的语句来指定需要使用哪种Exchange类型 channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT); 显然,这里声明的是Fanout的exchange模式。同时,我们注意到这里并没有一个与Exchange直面相关的类,来设置响应的属性。 在spring-amqp中,就针对Exchange单独定义了一个接口Exchange。
下面我们看看DirectExchange和Exchange的关系
Queue是用来存储消息的,消费者从这里拿走消息并消费。与上面提到的Exchange类似,Spring-amqp中也是通过一个类Queue来定义了队列。
我们应该还记得在原生的RabbitMQ中,Fanout模式下是如何绑定Exchange和Queue的 channel.queueBind(queueName, EXCHANGE_NAME, ""); 在Spring-amqp中,即使是绑定映射,也单独创建了一个类Binding
Direct模式的绑定 new Binding(someQueue, someDirectExchange, "foo.bar") Fanout模式的绑定 new Binding(someQueue, someFanoutExchange) Topic模式的绑定 new Binding(someQueue, someTopicExchange, "foo.*") 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。