全热交换器

消息发布时的权衡

六眼飞鱼酱① 提交于 2019-11-30 06:36:44
消息发布时的权衡   在 RabbitMQ 在设计的时候,特意让生产者和消费者 “脱钩”,也就是消息的发布和消息的消费之间是解耦的。   在 RabbitMQ中,有不同的投递机制(生产者),但是每一种机制都对性能有一定的影响。一般来讲速度快的可靠性低,可靠性好的性能差,具体怎么使用需要根据你的应用程序来定,所以说没有最好的方式,只有最合适的方式。只有把你的项目和技术相结合,才能找到适合你的平衡。 在 RabbitMQ 中实际项目中,生产者和消费者都是客户端,它们都可以完成申明交换器、申明队列和绑定关系,但是在我们的实战过程中,我们在生产者代码中申明交换器,在消费者代码中申明队列和绑定关系。 另外还要申明的就是,生产者发布消息时不一定非得需要消费者,对于 RabbitMQ来说,如果是单纯的生产者你只需要生产者客户端、申明交换器、申明队列、确定绑定关系,数据就能从生产者发送至 RabbitMQ。只是为了演示的方便,我们在例子中使用消费者消费队列中的数据来方便展示结果。 无保障   在演示各种交换器中使用的就是无保障的方式,通过 basicPublish发布你的消息并使用正确的交换器和路由信息,你的消息会被接收并发送到合适的队列中。但是如果有网络问题,或者消息不可路由,或者 RabbitMQ 自身有问题的话,这种方式就有风险。所以无保证的消息发送一般情况下不推荐。 失败确认  

AMQP 概论

依然范特西╮ 提交于 2019-11-30 02:21:40
AMQP   是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。 主要实现有 RabbitMQ。 客户端与 RabbitMQ 的通讯 连接   首先作为客户端(无论是生产者还是消费者),你如果要与 RabbitMQ 通讯的话,你们之间必须创建一条 TCP 连接,当然同时建立连接后,客户端还必须发送一条 “问候语”让彼此知道我们都是符合 AMQP 的语言的,比如你跟别人打招呼一般会说 “你好!”,你跟国外的美女一般会说“hello!”一样。 你们确认好 “语言”之后,就相当于客户端和 RabbitMQ 通过 “认证”了。你们之间可以创建一条 AMQP 的信道。 信道   概念:信道是生产者/消费者与 RabbitMQ 通信的渠道。信道是建立在 TCP 连接上的虚拟连接,什么意思呢?就是说 rabbitmq 在一条 TCP 上建立成百上千个信道来达到多个线程处理,这个 TCP 被多个线程共享,每个线程对应一个信道,信道在 RabbitMQ 都有唯一的 ID ,保证了信道私有性,对应上唯一的线程使用。   疑问:为什么不建立多个 TCP 连接呢?原因是 rabbit 保证性能