rabbitmq核心概念理解

2019-12-06  本文已影响0人  只会写一点点代码

1、Connection(连接rabbitmq)
rabbitmq是遵循AMQP协议的,换句话说其实rabbitmq就是erlang语言实现的AMQP协议的封装,AMQP说到底就是一个通讯协议,协议就一定会包含报文的交互,协议就是人为规定好的,我们只要遵从AMQP协议定义好的命令,就如同我们熟悉的http协议一样,GET,POST等方法在AMQP中也有相应的命令在生产者和消费者连接到rabbitmq的流转过程下图所示:

rabbitmq生产者.png rabbitmq 消费者.png
2、信道(channel)
上图还出现了一个channel的名称,我们知道其实建立连接以后其实就可以发送命令得到响应了,那为什么会出现信道这个概念呢,当建立了连接以后,其实就是创建了一个TCP连接,rabbitmq的信道就是在connection的基础上建立的,每个信道都会分配唯一的标示,而AMQP的指令都是通过信道传输的。
You can think about it as a post office: when you put the mail that you want posting in a post 
box, you can be sure that Mr. or Ms. Mailperson will eventually deliver the mail to your 
recipient. In this analogy, RabbitMQ is a post box, a post office and a postman.
       //定义一个direct的类型的交换器 名字叫hello
        channel.exchangeDeclare("hello","direct");

        //定义一条队列,名字叫helloWorld
        channel.queueDeclare("helloWorld",true,false,false,null);

        //将队列和交换机进行一个绑定
        channel.queueBind("helloWorld","hello","hello");

Queue.BindOk queueBind(String queue, String exchange, String routingKey) throws IOException;
这个是java的绑定源代码,绑定关系不是应该使用BindingKey吗?这里使用了Routingkey
因为direct类型必须要RoutingKey和BindingKey一摸一样才匹配,这样就给我们了一个潜台词
这两个玩意就是一个东西。
channel.basicPublish("hello","hello",MessageProperties.TEXT_PLAIN,"pujinwen".getBytes());

3、topic
这是因为direct的不灵活性,因为一个全等于,让很多业务没办法写,所以出来了topic,他支持一个Routingkey和bindingKey的模糊匹配。支持模糊匹配符号。

4、header
性能很差 ,就不介绍了,是根据发送信息的信息header内容做匹配;

官方文档把这个BindingKey认为是一种特殊的Routingkey,所以我们都称之为路由键,

上一篇 下一篇

猜你喜欢

热点阅读