
队列
ding_haitao
这个作者很懒,什么都没留下…
展开
-
RabbitMq中的消息传输保障
1,消息生产者需要开启事务机制或者确认机制来确保消息正确的到达了broker端。2,消息生产者需要配合使用mandatory参数或者备份交换器及死信队列来确保消息能够从交换器路由到队列中。3,消息和队列都需要进行持久化处理。4,消费者需要以手动确认的方式来确认已经正确消费的消息。...原创 2020-05-07 21:05:40 · 214 阅读 · 0 评论 -
Rabbit MQ中的消费端拒绝机制
Rabbit MQ的消费者拒绝机制有两种:单次拒绝Channel.basicReject(long deliveryTag, boolean requeue) throws IOException;其中deliveryTag为消息的编号,它是一个64位的长整型值。requeue参数设置为true,则Rabbit MQ会重新将这条消息存入队列,以便可以发送给下一个订阅的消费者;如果req...原创 2020-05-07 16:21:54 · 1074 阅读 · 0 评论 -
AMQP中的生产者与消费者模型
一,AMQP协议简介Module Layer:位于协议的最高层,主要定义了一些客户端调用的命令,比如Queue.Declare(申明一个队列)和Basic.Consume(订阅消费一个队列中的消息)。Session Layer:位于协议的中间层,主要负责客户端与服务器端的交互,为其通信提供可靠的同步机制和错误处理。Transport Layer:位于协议的最底层,主要传输二进制数据流,提供...原创 2020-05-07 14:26:46 · 444 阅读 · 0 评论 -
Kafka的java客户端连接出现Connection refused: no further information
在正常配置zookeeper和kafka后,编写测试代码发现报错了:java.net.ConnectException: Connection refused: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.f...原创 2020-04-20 20:18:46 · 2588 阅读 · 0 评论 -
RabbitMq中的生产者确认机制
在使用RabbitMq的时候,可以通过消息持久化操作来解决服务器异常崩溃导致的消息丢失,但是如何保证消息正常到达RabbitMq呢?事务机制RabbitMq中与事务相关的操作一共有三个:channel.txSelect,channel.txCommit,channel.txRollback。channel.txSelect用于将当前信道设置为事务模式,channel.txCommit用于事务提...原创 2020-04-19 11:39:49 · 2165 阅读 · 0 评论 -
RabbitMq中的备份交换器与死信队列
之所以将两者放在一起比较,是因为两者都由一个共同的特点:当消息不能被正常消费或投递时的容错机制。备份交换器:未能正常路由的消息,又不希望因为添加mandatory参数提高编码的复杂性,此时即可使用备份交换器,在声明交换器时传入alternate-exchange参数,需要注意的是,发送到备份交换器的消息路由键与从生产者发送时的一致,所以如果备份交换器的类型不是fanout,就会存在消息丢失的可能...原创 2020-04-18 21:52:21 · 297 阅读 · 0 评论 -
RabbitMq中的过期时间(TTL)
RabbitMq中的过期时间一般针对于队列和消息。队列的过期时间声明队列时传入的x-expires参数可以控制队列在自动删除前未被使用的时间(单位为毫秒,不能设置为0),其自动删除需要满足以下三个条件:该队列没有任何消费者订阅该队列声明后未被重新声明该队列没有调用过Basic.Get RPC命令服务器会确保在过期时间到达后 队列被删除,但是不保证删除队列的动作有多么的及时。在brok...原创 2020-04-18 21:28:32 · 705 阅读 · 0 评论 -
RabbitMq中的mandatory
mandatory是在发送一条Basic.Publish RPC命令时一起传递的参数,告诉RabbitMq如果消息不可路由,应该通过Basic.Return RPC命令将消息返回给发布者。设置mandatory标志说明开启了消息故障检测模式,它只会让RabbitMq向你通知失败,而不会通知成功。进一步,当交换器根据自身和路由键无法找到合适的队列时,当mandatory设置为true,会通过Ba...原创 2020-04-18 20:48:51 · 2737 阅读 · 0 评论 -
RabbitMq中的autoAck与no-ack
《RabbitMq实战指南》中的autoAck与《深入RabbitMq》中的no-ack其实是同一个意思:借《深入RabbitMq》中的图例说明autoAck(同no-ack)为true的时候,消息发送到操作系统的套接字缓冲区时即任务消息已经被消费,但如果此时套接字缓冲区崩溃,消息在未被消费者应用程序消费的情况下就被队列删除。所以,如果想要保证消息可靠的达到消费者端,建议将autoAck...原创 2020-04-18 20:12:17 · 3746 阅读 · 0 评论 -
RabbitMq中的exclusive
RabbitMq中真正处理消息是队列,自然exclusive也只对队列生效。声明了exclusive属性的队列只对首次声明它的连接可见,并且在连接断开时自动删除(可以参考RabbitMq中的autoDelete)。有三点需要额外注意:针对连接可见,只要是当前connection下的信道都可以访问一旦该队列被声明,其他连接无法声明相同名称的排他队列。队列即使显示声明为durable,连接...原创 2020-04-18 19:05:12 · 8483 阅读 · 1 评论 -
RabbitMq中的durable
RabbitMq对交换器,队列,消息都可以声明持久化属性,交换器和队列持久化属性为durable(其属性值为false代表不持久化,属性值为true代表持久化),消息持久化属性为deliveryMode(其属性值为1代表不持久化,属性值为2代表持久化)。在说明durable之前,需要指出的是:1,RabbitMq实例以broker表示,当broker重启时,所有未申明durable的交换器和队...原创 2020-04-18 17:59:26 · 12461 阅读 · 0 评论 -
RabbitMq中的autoDelete
RabbitMq在声明交换器和队列时,都有一个共同的属性为autoDelete,从字面意思上来说可以理解为自动删除,那么自动删除的前提是什么呢?抛开代码本身来说,从设计者的角度来思考,一个交换器或者一个队列在什么时候需要被自动删除呢?当然是该交换器或队列不被需要了,即交换器下曾经绑定过的交换器或队列解除绑定,队列下的消费者解除订阅。但是,一个交换器如果从来未曾被任何交换器/队列绑定过,一个队...原创 2020-04-18 17:34:47 · 8278 阅读 · 1 评论 -
以开发的角度重新认知消息中间件——起源简介
一,消息消息,message,对于开发来说,也是应用程序消费的数据,消息可以非常简单,文本字符串,JSON,XML等,也可以很复杂,比如内嵌对象,图片,视频等。二,消息与消息中间件对于消息中间件来说,消息本身的复杂程度被其屏蔽,消息队列中间件(Message Queue Middleware,简称MQ)利用高效可靠的消息传递机制进行平台无关的数据交流(有没有想到Java虚拟机),并基于数据通...原创 2020-04-17 13:50:21 · 277 阅读 · 0 评论