一、介绍AMQP协议

特性:
1:分布式事务支持。
2:消息的持久化支持。
3:高性能和高可靠的消息处理优势。

分发策略:
1: 轮询分发
2: 公平分发

AMQP消息路由必须的三部分:交换器、路由、绑定
 title=

消费者从队列中接收消息:

  1. 通过AMQP的basic.consume 命令将信道置为接收模式,直到取消队列订阅为止。能够持续接收消息
  2. 通过AMQP的basic.get命令实现向队列获取一条消息

注意:

  • RabbitMq基于AMQP协议
  • 对个消费者共用同一队列 ,消息的消费流程循环消费,cosumerA,cosumerB。

    1、 messageA 到达队列先 给conusumerA ,在consumerA中确认了接收了messageA消息,RabbiMQ将messageA从队列中删除
    2、message发送给consumerB ranhou....
  • 问题一:consumerA没有确认消息会怎么样?

    messageA会发送给下一个消费者,从而保证消息被消费,如果consumerA没有确认消息,队列将不会发送消息给消费者A,可以利用这点来控制消费时长。
  • 问题二:使用什么方式拒绝处理该条消息?

    1、把消费者从rabbiMq断开(会增加对RabbitMQ的负荷) 2、RabbitMq2.0.0及以上版本可以使用AMQP的basic.reject命令。把reject命令的requeue 值设为true则将消息发送到下一个message,false则是移除该消息。

名词介绍:

  • 生产者
  • 有效载荷(实际传输数据),
  • 标签(描述数据,指定谁可以复制消息)
  • 队列
  • 消费者
  • 信道:当TCp连接建立会创建AMQP信道,AMQP的命令通过信道发送,每条信道被指定唯一id。

二、交换器和绑定

交换器通过路由键来分发消息到不同队列:一共有4中类型交换器 direct、famous、topic、headers(headers交换器允许你匹配Amqp消息的header而非路由键)
  1. direct交换器:如果路由键匹配的话,消息就被投递到对应的队列
     title=
服务器必须实现direct类型交换器,包含一个空白字符串的默认交换器。队列的名称就是路由键
  1. famous 交换器:会将消息匹配到所有附加在此交换器上的队列
     title=

3.topic交换器:通过通配符匹配消息,使得不同源头的消息到达同一队列
 title=

三、虚拟主机

每一个vhost本质上是一个mini版的RabbitMq服务器,拥有自己的队列、交换器和绑定。挡在Rabbitmq集群中创建了一个mq则整个集群中都会创建这个vhost。

4、消息持久化和策略

  1. 持久化的方式: 1、把它 的投递模式(delicery mode)选项设置为2 2、发不到持久化的交换器 3、到达持久化的队列。(服务器会将持久性的消息写入到持久性日志中)

5、使用Rabbitmq的大致流程

  • 连接Rabbitmq
  • 获取信道
  • 声明交换器
  • 声明队列
  • 队列和交换器绑定
  • 消费消息
  • 关闭信道
  • 关闭连接

RabbitMq是运行在Erlang上的
1、启动结点 ./sbin/rabbitmq -server
2、关闭结点 ./sbin/rabbitmqctl stop 只关闭rabbitmq ./rabbitmqctl stop_app
3、Rabbitmq日志:LOG_BASE = /var/log/rabbitmq
4、默认控制台地址:http://localhost:15672/#/
5、默认账号密码:guest guest
会创建两个日志文件RABBITMQ_NODENAME-sasl.log 和RABBITMQ_NODENAME.log

文章参考书籍:《Rabbimq实战 高效部署分布式消息队列》


文nKkCJ
1 声望1 粉丝

引用和评论

0 条评论