如何确保消息正确地发送至RabbitMQ?组成

RabbitMQ和Kafka面试_weixin_34161083的博客-CSDN博客

在持久化方面,RabbitMQ的master queue每次收到新消息后,都会立刻写入磁盘,并把消息同步给mirror queue。假设在master queue 收到消息后,消息未同步到mirror queue 之前master queue 宕机,则此时mirror queue中就没有刚刚master queue收到的那条消息,当这个mirror queue被提升为master queue时,消费者连接到新的master queue上进行消费时就丢了一条消息。所以,RabbitMQ也会丢消息,只不过这个丢消息的概率非常低。

Rabbitmq 不承诺消息的顺序性,因此可以并发多线程处理。在队列中不必排队。如果对处理的顺序没有要求,就可以用Rabbitmq较容易的实现并发

发送方确认模式:
将信道设置成confirm模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的ID。
一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认给生产者(包含消息唯一ID)。
如果RabbitMQ发生内部错误从而导致消息丢失,会发送一条nack(not acknowledged,未确认)消息。
发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息。当确认消息到达生产者应用程序,生产者应用程序的回调方法就会被触发来处理确认消息。

接收方确认机制:
接收方消息确认机制:消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,RabbitMQ才能安全地把消息从队列中删除。
这里并没有用到超时机制,RabbitMQ仅通过Consumer的连接中断来确认是否需要重新发送消息。也就是说,只要连接不中断,RabbitMQ给了Consumer足够长的时间来处理消息。保证数据的最终一致性;

消息的组成:

1.Topic:特指Kafka处理的消息源(feeds of messages)的不同分类。

2.Partition:Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset

3.Message:消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息。

4.Producers:  数据生产者.Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition;比如基于"round-robin"方式或者通过其他的一些算法等.

5.Consumers: 数据消费者.每个consumer属于一个consumer group;反过来说,每个group中可以有多个consumer.发送到Topic的消息,只会被订阅此Topic的 每个group中的一个consumer消费.我们可以认为一个group是一个"订阅"者,一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以消费多个partitions中的消息.

6. Broker:缓存代理,Kafka集群中的一台或多台服务器统称为broker。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,可以提供可靠的消息传输机制。它可以通过多种方法来确保消息发送和接收。 首先,RabbitMQ使用AMQP(Advanced Message Queuing Protocol)作为消息传输协议,该协议具有可靠性和可靠发布确认机制,可以确保消息的成功发送。当消息发送时,发送者将收到一个确认,表示消息已被接收并成功传输给队列。如果发送者未收到确认,它可以重新发送消息或采取其他措施来确保消息发送。 其次,RabbitMQ提供了持久化机制,可以确保即使在服务器故障或重启之后,消息也能够被正确地传递。发送者可以将消息标记为持久性,这样即使服务器发生故障,消息也不会丢失,当服务器恢复正常运行时,消息将被正确地传递给接收者。 此外,RabbitMQ使用队列来存储消息发送者将消息发送到队列中,接收者从队列中获取消息进行处理。这种机制可以确保消息的顺序性传递,即先发送消息将先被接收和处理,这样可以保证消息正确性和一致性。 另外,RabbitMQ还提供了一些其他机制来确保消息发送和接收。例如,可以设置消息的过期时间,如果消息在指定的时间内没有被接收,则会被RabbitMQ删除。还可以设置消息的优先级,确保重要的消息能够优先被处理。 总之,RabbitMQ通过使用AMQP协议、持久化机制、队列、消息的过期时间和优先级等多种机制,可以确保消息的可靠发送和接收。无论是在普通的消息传递,还是在分布式系统中,RabbitMQ都是一个可靠的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值