RabbitMQ 简单入门

生产者(发送)、消费者(接收)、路由(交换器)

安装好后,默认安装了管理插件,直接访问:http://localhost:15672/,可以不用建用户,使用guest登录,密码也是guest。

另外用户目录和c:\windows里面.erlang.cookie 文件里面的值要一样,否则会提示cookie错误。

学习代码: https://pan.baidu.com/s/1c1EEL6S 密码: yvig

相关名词:

1. Server:RabbitMQ服务器,

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

3. Connection:生产者/消费者和RabbitMQ服务器的TCP连接。
4. Channel:创建完Connection后,需创建信道才能执行AMQP命令。一个Connection可以创建多个Channel。
5. Exchange:路由。接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType有fanout、direct和topic三种,对应路由使用上述3/4/5号模型。
6. (Message)Queue:消息队列,用于存储还未被消费者消费的消息。
7. Message:由Header和Body组成。Header是生产者添加的相关属性:是否持久化、被哪个MessageQueue接收、优先级等。而Body是传输的数据。
8. Binding:消息被复制传递时,一个消费者对应一个消息队列,消费者绑定MessageQueue到Exchange,可指定多个Bindingkey。生产者在发送Message时,可以在header指定RoutingKey,Exchange匹配RoutingKey和Bindingkey将Message路由到相应的Queue。
9. Command:AMQP命令,生产者/消费者通过Command完成与RabbitMQ服务器交互。Publish:发送消息,txSelect:开启事务,txCommit:提交事务。

交换器4种类型:direct, topic, headers, fanout

//direct   默认Exchange,一般可以用于日志分发,接收需要级别的日志。
//topic    一般用于发布订阅,根据routing key和Exchange的类型将message发送到一个或者多个Queue中,我们经常拿他来实现各种publish/subscribe,
//headers   根据Message的一些头部信息来分发过滤Message,忽略routing key的属性,如果Header信息和message消息的头信息相匹配,那么这条消息就匹配上了。
//fanout    一般用于广播、群聊,使用这种类型的Exchange,会忽略routing key的存在,直接将message广播到所有的Queue中。

 

RabbitMQ提供如下5种队列模型(远程调用不是消息队列)。

1.Simple

2.Work. 工作模式,一个消息只能被一个消费者获取。

          

3.Publish/Subscribe. 订阅模式,消息被路由投递给多个队列,一个消息被多个消费者获取。ExchangeType为fanout。

4.Routing. 路由模式,一个消息被多个消费者获取。并且消息的目的queue可被生产者指定。ExchangeType为direct。

5.Topic. 通配符模式,一个消息被多个消费者获取。消息的目的queue可用BindingKey以通配符(#:一个或多个词,*:一个词)的方式指定。ExchangeType为topic。

  

6.PRC. 远程调用

 

优先级

1. 在后台管理里面为Queue上附加优先级属性 x-max-priority   取值0-255

复制代码
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("x-max-priority", 20);
channel.QueueDeclare(queue: "hello",
                                durable: true,
                                exclusive: false,
                                autoDelete: false,
                                arguments: dic);
复制代码

 

 

 

2. 在Message上指定优先级属性

 var properties = channel.CreateBasicProperties();
 properties.Priority = 1;
 channel.BasicPublish(exchange: "",
                      routingKey: "hello",
                      basicProperties: null,
                      body: body);

 

 

 

posted @ 2017-11-16 18:23  luckc#  阅读(195)  评论(0)    收藏  举报