php 消息中间件,简单说说消息中间件RabbitMQ(上)

MQ,消息队列,消息以管道的方式进行传递。其就像个“快递员”,将消息从生产者送到消费者处。RabbitMQ是消息队列中的一种。

消息队列适用于异步返回执行时间长,且消息发送者不多关注执行结果的情形。

中间件是将具体业务和底层逻辑解耦的软件,分为:MOM(消息中间件)、RPC(远程过程调用中间件)、UDA(数据访问中间件)、TPM(交易中间件)等。

消息中间件,又称为消息队列、消息队列中间件,分为RabbitMQ、ActiveMQ、Kafka等。

各部分的名字和作用?

1.Brocker:消息队列服务器实体,Rabbitmq可以作为一个选择。

2.Exchange:消息交换机,用于接收、分配消息。指定消息按什么规则,路由到哪个队列。

3.Queue:消息队列,用于存储生产者的消息。每个消息都会被投入到一个或者多个队列里。

4.Binding Key:绑定关键字,用于把交换器的消息绑定到队列中,它的作用是把exchange和queue按照路由规则binding起来。

5.Routing Key:路由关键字,用于把生产者的数据分配到交换器上。exchange根据这个关键字进行消息投递。

6.Vhost:虚拟主机,一个broker里可以开设多个vhost,用作不用用户的权限分离。

7.Producer:消息生产者,就是投递消息的程序。

8.Consumer:消息消费者,就是接受消息的程序。

9.Channel:信道,消息推送使用的通道。可建立多个channel,每个channel代表一个会话任务。

使用流程?

1.消息接收客户端连接到消息队列服务器,打开一个channel。

2.客户端声明一个exchange,并设置相关属性。

3.客户端声明一个queue,并设置相关属性。

4.客户端使用routing key,在exchange和queue之间建立好绑定关系。

5.消息发布客户端投递消息到exchange。

6.exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。

总结起来就是:生产者发送一条消息给交换机——交换机根据关键字匹配到对应的队列——将消息存入队列——消费者从队列中取出消息使用。

我们的项目为什么要选择RabbitMQ,而不选择别的消息中间件?

1.除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器;

2.可靠性,RabbitMQ的持久化支持,保证了消息的稳定性;

3.高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环,和高可用特性;

4.集群部署简单,正是因为Erlang使得RabbitMQ集群部署变的超级简单;

5.社区活跃度高,根据网上资料来看,RabbitMQ也是首选;

2.工作队列模式:一个生产者产生的消息可以供多个消费者消费,但是一个消息只能被其中一个消费者消费。

3.发布/订阅模式:多了一个交换机,生产者将消息发送到交换机上,交换机发送消息给各个队列,此时,一个消息可以被多个消费者获取。

值得一提的是,这又叫广播模式,是最常用的模式了,在ITOO中使用的就是这种模式。

4.路由模式:又多了一个routing key,生产者发送消息带有routingkey,消费者选择自己需要的消息进行消费,也配置一个routing key。

5.主题模式:又多了一个通配符,这样消费端如果需要好几种消息的时候,不用一个一个的设置,直接用通配符可以接收自己想要的各种消息。

6.RPC:c对s说“我这有个任务需要你的帮助”,s处理完后,将结果返回给c。

你可能感兴趣的:(php,消息中间件)