初学RabbitMQ

一、RabbitMQ中的一些概念

 (1)Connection(连接)

  与RabbitMQ建立连接,由ConnectionFactory创建每个Connection至于一个物理server进行连接,此链接基于Socket进行连接,可以理解为一个dbConnection

 (2)Channel(通道)

  在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务

 (3)Exchange(交换器)

   交换机,决定了消息路由规则,路由到哪个队列。

 (4)Queue(队列)

   消息队列载体,每个消息都会被投入到一个或多个队列。

 (5)Bind(绑定器)

  把exchange和queue按照路由规则绑定起来

 (6)RoutingKey(路由关键字最多不能超过255个字符)

  exchange根据这个关键字进行消息投递

二、消息队列使用过程

  (1)客户端连接到消息服务器

(2)打开一个channel

(3)声明一个exchange并设置属性

(4)声明一个queue并设置属性

(5)使用Routing key在exchange和queue之间绑定关系

(6)客户端消息发送到exchange

(7)Exchange接受到消息,根据key和已经设置的bingding,进行消息路由,将消息发送到一个或多个队列中

(8)消费者消费

三、这个过程走分三个部分:

  (1)客户端(生产消息队列)

(2)RabbitMQ服务端(负责路由规则的绑定与消息的分发)

(3)客户端(消费消息队列中的消息)

四、一个消息可以走一次网络却被分发到不同的消息队列中,然后被多个的客户端消费,那么这个过程就是RabbitMQ的核心机制,RabbitMQ的路由类型与消费模式

五、RabbitMQ中Exchange的类型

类型有4种,direct,fanout,topic,headers。其中headers不常用,本篇不做介绍,其他三种类型,会做详细介绍。

(1)Exchange类型direct

他是根据交换器名称与routingkey来找队列的。

Note:消息从client发出,传送给交换器ChangeA,RoutingKey为routingkey.ZLH,那么不管你发送给Queue1,还是Queue2一个消息都会保存在Queue1,Queue2,Queue3,三个队列中。这就是交换器的direct类型的路由规则。只要找到路由器与routingkey绑定的队列,那么他有多少队列,他就分发给多少队列。

(2)Exchange类型fanout

这个类型忽略Routingkey,他为广播模式。

Note:消息从客户端发出,只要queue与exchange有绑定,那么他不管你的Routingkey是什么他都会将消息分发给所有与该exchang绑定的队列中。

(3)Exchange类型topic

这个类型的路由规则如果你掌握啦,那是相当的好用,与灵活。他是根据RoutingKey的设置,来做匹配的,其中这里还有两个通配符为:

*,代表任意的一个词。例如topic.zlh.*,他能够匹配到,topic.zlh.one ,topic.zlh.two ,topic.zlh.abc, ....

#,代表任意多个词。例如topic.#,他能够匹配到,topic.zlh.one ,topic.zlh.two ,topic.zlh.abc, ....

六、消息队列的消费与消息确认Ack

  (1)消息队列的消费

Note:如果一个消息队列中有大量消息等待操作时,我们可以用多个客户端来处理消息,这里的分发机制是采用负载均衡算法中的轮询。第一个消息给A,下一个消息给B,下下一个消息给A,下下下一个消息给B......以此类推。

(2)为啦保证消息的安全性,保证此消息被正确处理后才能在服务端的消息队列中删除。那么rabbitmq提供啦ack应答机制,来实现这一功能。

ack应答有两种方式:1、自动应答,2、手动应答。具体实现如下。

时间: 2024-12-28 04:46:24

初学RabbitMQ的相关文章

springboot初学---rabbitmq的使用

1.jar包依赖 <!-- 配置rabbitMQ --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <version>1.5.10.RELEASE</version> </dependency> 2.application.pro

RabbitMQ 初学及其深入学习推荐的一些文章

记录一下学习RabbitMQ过程中,收获比较大的一些文章: 什么都别说,先把这6个Demo 玩一遍 https://www.rabbitmq.com/getstarted.html 大佬1号 https://blog.csdn.net/hzw19920329/article/category/6518862 大佬2号: https://blog.csdn.net/jiao_fuyou/article/category/2126129 大佬3号: https://blog.csdn.net/u01

RabbitMQ初学之一:exchange与queue的绑定

最近公司需要使用RabbitMQ,但我之前一直使用的是ActiveMQ,对RabbitMQ进行了初步的学习,但是还不系统,自己做了一些小测试,怕自己以后忘了 一. 背景 拿到代码以后,发现,生产者在向外发送消息时,指定了exchange(交换机)和routing key,但是没有指定queue(队列)也没有将queue(队列)绑定到exchange,刚开始因为不熟悉rabbitMQ,所有不知道怎么回事,后来知道了:消费者在消费消息时,需要声明队列(队列名字随便),并将声明的队列通过routing

golang rabbitmq实践(啰嗦)

1:背景简介 我是一个.net一线开发,今年6月份离开帝都来到魔都,后入职于莫江互联网在线教育公司.现刚刚转正,在这短短的三个月的时间,莫江给我的是职业路上颠覆性变化. .net技术迷 => nodejs/java/golang 在此之前,我认为我会在.net平台坚定不移的走下,因为我是如此的喜欢C#语言,认为它是那么优美简介,vs ide号称宇宙神器,coding如此happy,but 当我们每周技术讨论例会上,我才真正的认识到我自己原来就是井底之蛙 2:C#和其他我所接触的语言对比 网上关于

01 Rabbitmq

在程序系统中,例如外卖系统,订单系统,库存系统,优先级较高 发红包,发邮件,发短信,app消息推送等任务优先级很低,很适合交给消息队列去处理,以便于程序系统更快的处理其他请求. 消息队列工作流程: 1 1 消息队列一般有三个角色: 2 2 队列服务端 3 3 队列生产者 4 4 队列消费者 5 5 消息队列工作流程就如同一个流水线,有产品加工,一个输送带,一个打包产品 6 6 输送带就是 不停运转的消息队列服务端 7 7 加工产品的就是 队列生产者 8 8 在传输带结尾打包产品的 就是队列消费者

windows上部署rabbitmq遇到的一些问题及解决方法

在目前这家公司,刚进公司的时候接手了一个服务,算是个比较完备的服务,其中几台电脑之间通信用到了rabbitmq,一开始没出什么问题,然后后来勒索病毒wanner cry来的时候,系服把所有服务器装了一个什么杀毒软件,重启之后rabibtmq集群就出现了一些问题,经过一番学习,把这些问题都搞定了,现在做一个总结. 一开始,我按照官网的描述,把四台服务器加入了一个集群,但是不知道为什么,除了主节点外,另外三台都看不了集群状态,由于并不影响什么,就先放在那没管,其实想起来,是因为之前集群的配置文件没删

Spring rabbitMq 中 correlationId或CorrelationIdString 消费者获取为null的问题

问题 在用Spring boot 的 spring-boot-starter-amqp   快速启动 rabbitMq 是遇到了个坑 消费者端获取不到:correlationId或CorrelationIdString 问题产生的原因 correlationId 的在 spring rabbitmq 2.0 以后 byte方式会被放弃,所以 目前 代码中有些地方没有改过来,应该算一个BUG @SuppressWarnings("deprecation") public class De

在Node.js中使用RabbitMQ系列二 任务队列

在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心解决的问题是避免立即处理那些耗时的任务,也就是避免请求-响应的这种同步模式.取而代之的是我们通过调度算法,让这些耗时的任务之后再执行,也就是采用异步的模式.我们需要将一条消息封装成一个任务,并且将它添加到任务队列里面.后台会运行多个工作进程(worker process),通过调度算法,将队列里的任

RabbitMQ 很成熟 不是阿里的

简介 官网 http://www.rabbitmq.com RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现 RabbitMQ实现了AMQP标准 安装 参考 http://www.cnblogs.com/LipeiNet/p/5973061.html 安装 erlang 有安装C运行库,给 Erlang 用的  配置环境变量 ERLANG_HOME C:\Program Files\erl8.3 安装 MQ服务器软件 3.6.9  配