入门消息中间件RabbitMQ!

学习过activemq的同学可能会理解起RabbitMQ的相关概念会比较快!慢慢来!

 

什么 是RabbitMQ:

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

AMQP Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放
标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不
受产品、开发语言等条件的限制。

RabbitMQ 用于在分布式系统中存储转发消息,在易用性、扩展
性、高可用性等方面表现不俗。具体特点包括:

1.可靠性

Rabbitmq使用一些机制来保证,可靠性,比如持久化,传输协议,发布确认。

2.路由灵活

在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ
已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个
Exchange 绑定在一起,也通过插件机制实现自己的 Exchange

3.消息集群

多个rabbitma服务器可以组成一个集群,形成一个逻辑Broker(经纪人)

4.高可用

队列可以在集群中的机器上面进行镜像,使得在部分节点出问题的时候还是可以用的。

5.多语言客户端

rabbitmq几乎支持所有常用语言,比如java,.net还有啥呢,www.baidu.com

6.跟踪机制

假如消息有异常,mq可以去跟踪异常。

RabbitMQ的主要概念:

RabbitMQ Server: 它是一种传输服务,他的作用就是维护一条生产到消费的路线,保证数据的传输。

Producer: 消息生产者,如图A、B、C,数据的发送方。消息生产者连接RabbitMQ服
务器然后将消息投递到Exchange。

Consumer:消息消费者,如图1、2、3,数据的接收方。消息消费者订阅队列,
RabbitMQ将Queue中的消息发送到消息消费者。

Exchange:生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个
或多个Queue中(或者丢弃)。Exchange并不存储消息。RabbitMQ中的Exchange有
direct、fanout、topic、headers四种类型,每种类型对应不同的路由规则。


Queue:(队列)是RabbitMQ的内部对象,用于存储消息。

消息消费者就是通过订阅队列来获取消息的,
RabbitMQ中的消息都只能存储在Queue中,生产者生产消息并最终
投递到Queue中,消费者可以从Queue中获取消息并消费。多个消费者可以订阅同一个
Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者
都收到所有的消息并处理。

RoutingKey(关键词):生产者在将消息发送给Exchange的时候,一般会指定一个routing key,
来指定这个消息的路由规则,而这个routing key需要与Exchange Type及binding key联
合使用才能最终生效。在Exchange Type与binding key固定的情况下(在正常使用时一
般这些内容都是固定配置好的),我们的生产者就可以在发送消息给Exchange时,通过
指定routing key来决定消息流向哪里。RabbitMQ为routing key设定的长度限制为255
bytes。

Connection: (连接):Producer和Consumer都是通过TCP连接到RabbitMQ Server
的。以后我们可以看到,程序的起始处就是建立这个TCP连接。

Channels: (信道):它建立在上述的TCP连接中。数据流动都是在Channel中进行
的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel

VirtualHost:权限控制的基本单位,一个VirtualHost里面有若干Exchange和
MessageQueue,以及指定被哪些user使用

关于安装教程:https://www.cnblogs.com/ericli-ericli/p/5902270.html

默认的用户:guest密码:guest

 

上面几个大分类分别是:概览、连接、信道、交换器、队列、用户管理

 

RabbitMq的几种模式:这几种模式跟路由密切关联:

直接模式(Direct)

通俗的讲就是2个傻吊一个密室聊天其他人不知道他们在聊啥!

任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。这句话上面意思呢,就是任何发送的直接路由都会根据关键字也就是队列的名字。在消费的时候指定了队列名的类会被触发!这句话等下看代码就理解了!

1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下
文称其为default Exchange)。
2.这种模式下不需要将Exchange进行任何绑定(binding)操作
3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。
4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

来一波手动创建队列:

 

 

Durability:是否做持久化 Durable(持久) transient(临时)

Auto delete : 是否自动删除

 

代码实现消息的生产和消费,这个是我的码云地址:https://gitee.com/xiaosuhao/rabbitmq

还有一木有完善!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章