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);



浙公网安备 33010602011771号