Spring集成RabbitMQ-发送消息

纵使Spring-AMQP对很多对象进行了包装,也添加了很多对象,比如RabbitAdmin、ConnectionFactory等等。
但是要明白RabbitMQ是用来干什么的,其实,最主要的还是用来发送消息和接收消息。

发送消息

0815send方法.png
  • 第一个方法只传了一个参数Message,即要发送的消息实体以及消息的配置属性等,这在上一节介绍Message类的时候有介绍过

  • 第二个方法在传了Message参数的基础上,还传了一个routingKey,这是用于路由到指定Queue上用的,比如我们在《RabbitMQ入门》系列中有提到的不声明Exchange的Direct模式,就只要声明routingKey,因为不指定Exchange,RabbitMQ会发到默认的exchange上

  • 第三个方法,在第二个方法基础上添加了Exchange参数,比如前面提到的Topic就是这种模式

针对不同的模式、不同的应用场景,Spring-AMQP都给了相应的方法

下面是调用第三种方法的举例

image.png

除了直接在send方法中设置属性,我们还可以直接在amqpTemplate对象上设置Exchange和routingkey的值

image.png

通过这样的方式指定,就能够实现对新设置的属性值覆盖已有的默认值。
不得不说,如果不通过上面的指定的方式,那么这两个属性的默认值都是空字符串。
Exchange不指定的话,则会使用RabbitMQ默认的Exchange,像我们之前提到的Hello World模式和Work模式。
RoutingKey不指定的话,表示不需要routingKey,比如Fanout模式类似广播,就不需要指定routingKey

构建消息类

既然要发送消息,那么我们就要构建消息,在前面我们提到了Message类,其中的成员有消息实体Body和消息本身的属性MessageProperties。下面我们看看如何构建一个消息对象,我们可以用MessageBuilder,也能用MessagePropertiesBuilder。

Spring集成RabbitMQ-发送消息_第1张图片
image.png
Spring集成RabbitMQ-发送消息_第2张图片
image.png

通过上面的Builder类,我们还可以设置MessageProperties的其他属性比如messageId和时间戳等等。
除此以外,我们还可以用到这些方法setHeader(String key, String value)、removeHeader(String key)、copyProperties(MessageProperties properties)
那么,这些消息构造器是如何被创建出来的呢,我们有如下5种静态方法

Spring集成RabbitMQ-发送消息_第3张图片
image.png
  • 提供了消息体进行初始化,消息体直接引用这个参数。

  • 提供消息体进行创建,消息体使用提供参数的拷贝。

  • 提供了字节数组,消息体将拷贝这个字节数组的部分作为消息体。

  • 从另外一个消息创建,消息体将引用例外一个消息体,属性将使用另外一个消息的属性拷贝。

  • 从另外一个消息创建,消息体和属性都使用另外一个消息的拷贝。

有关发送消息的方法其实还有convertAndSend,这类方法将在后面的消息转换部分详细讲解。

如果您觉得阅读本文对您有帮助,请点一下“喜欢”按钮,您的“喜欢”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

Spring集成RabbitMQ-发送消息_第4张图片

你可能感兴趣的:(Spring集成RabbitMQ-发送消息)