RabbitMQ
文章平均质量分 58
RabbitMQ相关的内容
煎丶包
这个作者很懒,什么都没留下…
展开
-
RabbitMQ的优先级队列
优先级队列队列需要设置优先级队列,消息需要设置消息的优先级。消费者需要等待消息已经发送到队列中,然后对队列中的消息进行排序,最后再去消费。 Map<String, Object> arguments = new HashMap<>(); arguments.put("x-max-priority", 10); //设置优先级队列 channel.queueDeclare(QUEUE_NAME, false, false, fal原创 2021-06-25 19:46:39 · 664 阅读 · 0 评论 -
RabbitMQ的发布确认机制
一、发布确认机制当RabbitMQ自身宕机的时候,RabbitMQ 重启期间生产者消息投递会失败,导致消息丢失。为了保证消息的可靠投递,需要将发送的消息进行备份,放到缓存中。二、发布确认代码实现创建发布确认配置类PublishConfirmConfig@Configurationpublic class PublishConfirmConfig { //交换机名称 public static final String PUBLISH_CONFIRM_EXCHANGE = "p原创 2021-06-25 15:05:13 · 159 阅读 · 1 评论 -
RabbitMQ的延迟队列机制
一、延迟队列延时队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。二、队列TTL创建一个配置类,声明并配置交换机和队列@Configurationpublic class TtlQueueConfig { //普通交换机名称 public static final String NORMAL_EXCHANGE = "X"; //死信交换机名称原创 2021-06-25 09:28:38 · 1951 阅读 · 1 评论 -
RabbitMQ的死信队列机制
一、死信队列死信指的是无法被消费的消息,由于消息TTL过期、队列达到最大长度、消息被拒绝等原因,导致队列中一些消息无法被消费,这样的消息如果没有进行后续的处理,就会变成死信。为了保证消息数据不丢失,需要使用死信队列机制。二、死信队列的实现1、消息 TTL 过期普通队列消费者Consumer01public class Consumer01 { //不同交换机 public static final String NORMAL_EXCHANGE = "normal_exchang原创 2021-06-24 10:31:33 · 736 阅读 · 0 评论 -
RabbitMQ交换机以及各种类型
Exchanges交换机生产者生产的消息从不会直接发送到队列,只能将消息发送到交换机。交换机一方面它接收来自生产者的消息,另一方面将它们推入队列。交换机必须确切知道如何处理收到的消息。是应该把这些消息放到特定队列还是说把他们放到许多队列中还是说应该丢弃它们。这些都是由交换机的类型来决定。Exchanges的类型直接(direct)主题(topic)标题(headers)扇出(fanout)Bindings绑定交换机和队列之间的绑定fanout扇出——发布/订阅模式将接收到的所有消原创 2021-06-23 23:51:05 · 168 阅读 · 1 评论 -
RabbitMQ的发布确认机制
一、发布确认原理生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始)。一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息的唯一 ID),这就使得生产者知道消息已经正确到达目的队列。如果消息和队列是可持久化的,那么确认消息会在将消息写入磁盘之后发出,broker 回传给生产者的确认消息中 delivery-tag 域包含了确认消息的序列号,此外 broker 也可以设置bas原创 2021-06-23 11:16:04 · 676 阅读 · 1 评论 -
RabbitMQ的不公平分发和欲取值
不公平分发RabbitMQ 分发消息默认采用的轮训分发,但是不同的消费者处理消息的快慢也不一样,有的处理快有的处理慢。而设置为不公平分发模式,意思就是如果这个任务我还没有处理完或者我还没有应答你,你先别分配给我,我目前只能处理一个任务,然后 rabbitmq 就会把该任务分配给没有那么忙的那个空闲消费者。如果所有的消费者都没有完成手上任务,队列还在不停的添加新任务,队列有可能就会遇到队列被撑满的情况,这个时候就只能添加新的 worker 或者改变其他存储任务的策略。欲取值本身消息的发送就是异步发送的原创 2021-06-23 09:11:51 · 666 阅读 · 2 评论 -
RabbitMQ的持久化
一、消息队列的持久化在声明消息队列是,将durable设置为true控制台中显示这个消息队列是持久化的即使重启RabbitMQ服务器,这个消息队列仍然存在,这只是消息队列进行了持久化,不能保证消息在RabbitMQ服务器重启后仍然存在,所以还需要对消息进行持久化。二、消息持久化生产者在发布消息时设置属性为MessageProperties.PERSISTENT_TEXT_PLAIN就可以将消息进行持久化将消息标记为持久化并不能完全保证不会丢失消息。尽管它告诉 RabbitMQ 将消息保存到原创 2021-06-22 22:54:15 · 2008 阅读 · 0 评论 -
RabbitMQ的消息应答机制
一、消息应答机制消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉,由于RabbitMQ 一旦向消费者传递了一条消息,便立即将该消息标记为删除。在这种情况下,突然有个消费者挂掉了,我们将丢失正在处理的消息,以及后续发送给该消费者的消息也无法接收到。为了保证消息在发送过程中不丢失,rabbitmq 引入消息应答机制。消费者在接收到消息并且处理该消息之后,告诉 rabbitmq 它已经处理了,rabbitmq 可以把该消息删除掉了。二、自动应答消息发送后立原创 2021-06-22 20:10:11 · 705 阅读 · 1 评论 -
RabbitMQ的工作队列模式
Work Queues模式一个生产者生产消息,多个工作线程去接收,多个工作线程之间是竞争关系启动两个工作线程public class Worker1 { //队列名称 public static final String QUEUE_NAME = "hello"; public static void main(String[] args) throws Exception { //创建一个连接,获取一个信道 Channel channel原创 2021-06-22 17:38:59 · 134 阅读 · 0 评论 -
RabbitMQ简单队列模式实现消息通信
RabbitMQ简单队列模式(Hello World)生产者public class Producer { //队列名称 public static final String QUEUE_NAME = "hello"; public static void main(String[] args) throws Exception { //1.创建一个连接工厂 ConnectionFactory connectionFactory = new原创 2021-06-22 16:29:26 · 158 阅读 · 0 评论 -
RabbitMQ核心概念
一、RabbitMQ四大核心概念RabbitMQ是一个消息中间件,负责接收、存储、转发消息数据生产者产生数据发送消息的程序是生产者交换机交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,或者是把消息丢弃。队列队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机原创 2021-06-22 09:51:47 · 398 阅读 · 0 评论