今天,本文相对简单。让我们与您的朋友分享兔子的七种消息。
在大多数情况下,我们可能会在弹簧靴或弹簧云环境中使用RabbitMQ,因此我也主要分享这两个方面的RabbitMQ。
一张图片是一千个单词,如下:
这张照片涉及以下概念:
每个人都知道RabbitMQ是AMQP营地中的一种产品。Spring Boot在Spring-Boot-Starter-AMQP上提供具有自动配置依赖性的AMQP。
成功创建了项目后,rabbitmq在应用程序中的基本连接信息。
接下来,执行RabbitMQ配置。在RabbitMQ中,所有消息生产商都会提交一条消息,将通过Exchange提交。Exchange将根据不同的策略将消息分发给不同队列。
RabbitMQ官方网站介绍了以下消息分布形式:
这里给出了七种,其中第七是消息确认。
因此,在这里,我主要介绍前六种发送和接收的方法。
嗯?为什么没有开关?这实际上是默认开关。我们需要提供队列和消费者。信息传播如下:
让我们看一下代码实施:
让我们首先看一下队列的定义:
让我们看一下消息消费者的定义:
消息发送:
目前,默认直接连接的开关(DirectExchange),DirectExchange的路由策略是将消息队列绑定到DirectExchange。当消息到达DirectExchange时,它将转发为与消息的队列相同的队列,因为exkethe消息队列被称为“ Hello-Queue”,而RoutingKey作为“ Hello-Quele”的消息将被新闻队列接受。
这种情况就像:
生产者,默认开关,队列,两个消费者,如下所示:
队列对应于多个消费者。默认情况下,队列均匀分配给消息,并将消息分为不同的消费者。消费者可以配置其各自的并发功能,然后提高消息的消耗能力。他们还可以配置手动ACK来决定是否消耗某个消息。
让我们看一下并发能力的配置,如下:
可以看出,第二个消费者将并发配置为10。此时,对于第二个消费者,将有10个用于消费新闻的子线程。
启动该项目,RabbitMQ背景中也有11个消费者。
目前,如果生产者发送10条消息,它将立即消耗。
消息传递方法如下:
新闻消费日志如下:
可以看出,该消息是由第一个消费者消耗的。但是,朋友需要注意并非总是如此的事情(您可以看到几次差异),并且第一个消费者可能会消耗新闻(仅仅因为第二个消费者有十个线程可以开始在一起,因此第二次消费者消费的消息比例更大)。
当然,新闻消费者也可以打开手册ACK,以便可以自己确定RabbitMQ的信息。配置手册ACK的方法如下:
消费代码如下:
目前,第二个消费者拒绝了所有新闻,第一个消费者消耗了所有新闻。
工作队列就是这种情况。
让我们看一下订阅模式,情况就是这样:
一个生产者,多个消费者,每个消费者都有自己的队列。生产者没有直接将消息发送到队列。相反,它已发送到交换机。,到达队列以实现由多个消费者获得的目的。应该注意的是,如果消息是在没有队列的情况下发送到交易所的没有能力将消息存储在RabbitMQ中。只有队列才能存储消息,如下图所示
在这种情况下,我们有四个开关可供选择,即:
让我给你一个简单的例子。
3.3.1 DirectDirectectExchange的路由策略是将消息队列绑定到DirectExchange。当一条消息到达DirectExchange时,它将转发为与新闻相同的队列。例如,消息队列被称为“ Hello-Queue”,新闻Queue将接受RoutingKey为“ Hello-Queue”的新闻。DirectExchange的配置如下:
让我们看一下消费者:
通过@rabbitlistener注释指定消息消耗的方法来指定消息消耗的方法,而方法参数是接收的消息。然后在单元测试类中注入rabbittemplate对象以发送消息,如下:
最终执行结果如下:
3.3.2 FanOutFanoteXchange的数据交换策略是将所有消息转发到Fanoutexchange,以使其与其所有队列绑定。在此策略中,RutingKey将不会发挥任何作用。
首先创建fanoutexchange,参数含义与创建DirectExchange参数的含义一致,然后创建两个队列,然后将这两个队列绑定到fanoutexchange.next.next,创建两个消费者,如下:
两个消费者在两个消息队列中消耗消息,然后在单元测试中发送消息,如下:
请注意,当您在此处发送消息时,您不需要它,可以指定它,可以直接传递。
最终执行日志如下:
3.3.3 TopictOpiceXchange是一种相对复杂但灵活的路由策略。在TopiceXchange中,队列势必通过RoutingKey进行TopiceXchange。当消息到达TopiceXchange时,TopiceXchange将根据消息报告。Superior.topicexchange配置如下:
接下来,为三个队列创建三个消费者,如下:
然后在单元测试中发送消息,如下:
根据RabbittopicConfig中的配置,第一条消息将被路由到名为“小米”的队列。“小米”和队列称为“电话”,第四条消息将在名为“ Huawei”和“ Huawei”和“ Phone”和“ Phone”的队列上路由。最后一条消息将路由到队列上的“电话”“电话”。
3.3.4 HeaderHeaderSexchange是一种使用较少使用的路由策略。HeaderSexchange将根据消息的标题使用消息路由到不同队列。该策略与RoutingKey无关。配置如下:
这里的大多数配置与先前引入的配置相同。绑定配置的差异是第一个绑定名方法,即通往队列的途径称为“名称名称”。您还可以在此处使用WheReall方法,表明必须匹配消息的所有标题。WhereAny和WhereAleall实际上对应于称为X-Match的属性。绑定中的配置表示,只要新闻包含年龄,无论如何,无论如何,无论如何年龄是多少,消息路线在名为“年龄标题”的队列上。
接下来,创建两个消费者:
请注意,此处的参数是在字节数组中接收到的。然后在单元测试中创建消息发送方法。在这里发送与RoutingKey无关,如下:
在这里创建两个消息。两条消息具有不同的标题,并且不同的标题将被发送到不同的队列。
最终执行效果如下:
就是这样:
一个生产者,一个开关,两个队列,两个消费者和生产者在创建交换后,基于RoutingKey绑定相应的队列,以及在发送消息时,指定消息的特定路由键。
如下所示:
这是根据路由键转到路由消息。我不会在这里举一个例子。您可以参考3.3.1未成年人。
就是这样:
生产者,一个开关,两个队列,两个消费者,生产者创建了主题的交换并将其绑定到队列。该绑定可以由关键字写入指定内容。注意写作格式。
如下所示:
我不会举这个例子。前面的3.3.3部分已得到一个示例,我不会详细介绍。
以RPC新闻的形式,我刚刚写了一篇文章,并在两天前介绍了它。我不会在这里说太多。门户:
这种发送确认之前已有书面相关文章,门户网站:
好吧,今天,本文主要是为了汇编七种形式的新闻,并与朋友一起在RabbitMQ中接收。有兴趣的朋友可以尝试?
公共帐户[Jiangnan的小雨]在后台回复Rabbitmqdemo,获取本文的案例地址?