1.初步:
1)消息中间件的作用、RabbitMQ开发语言、协议、启动命令
2)生产者代码基本流程、消费者代码基本流程
2.入门
1)概念:模型框架、生产者(消息组成)、消费者(只消费消息体)、队列(存储消息)、 交换机(类型(4+2))
2)交换机:Exchange.DeclareOk exchangeDelare(String exchange,String type,boolean durable,boolean autoDelete,boolean internal,Map
3)队列:Queue. DeclareOk queueDeclare (String queue, boolean durable, boolean exclusive,boolean autoDelete, Map
4)发送消息:void basicPublish (String exchange , String routingKey, BasicProperties props ,byte[) body),BasicProperties常用参数contentType、contentEncoding、expiration、Headers、DeliveryMode
5)消息消费模式(推模式Basic.Consume和拉模式Basic.Get)
6)推模式消费消息:String basicConsume(String queue , boolean autoAck, String consumerTag, boolean noLocal , boolean exclusive, Map
7)消息拒绝:void basicReject(long deliveryTag, boolean requeue)
void basicNack(long deliveryTag, boolean multiple , boolean requeue)
3.进阶
1)生产者参数:mandatory和immediate
a)mandatory:当mandatory 参数设为true 时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ 会调用Basic.Return 命令将消息返回给生产者。当mandatory 参数设置为false 时,出现上述情形,则消息直接被丢弃。
通过调用channel . addReturnListener 来添加ReturnListener 监昕器实现
b)immediate:当immediate 参数设为true 时,如果交换器在将消息路由到队列时发现队列上并不存在任何消费者,那么这条消息将不会存入队列中。当与路由键匹配的所有队列都没有消费者时,该消息会通过Basic . Return 返回至生产者。
2)备份交换机(AE):alternate-exchange
3)过期时间TTL:两种(队列x-message-ttl毫秒、消息expiration毫秒,取小)
4)死信队列:设置方式(x-dead-letter-exchange)、消息来源(拒绝、过期、队列满)
5)延迟队列:通过DLX和TTL模拟实现
6)持久化:持久化(交换机参数、队列参数、消息BasicProperties.deliveryMode(2)),RabbitMQ 并不会为每条消息都进行同步存盘(调用内核的fsync方法)的处理,可能仅仅保存到操作系统缓存之中而不是物理磁盘之中
7)生产者消息确认:2种方式
a)事务机制:channel.txSelect, channel.txCommit, channel.txRollback、确认阻塞,降低吞吐量
b)确认机制(publisher confirm):channel.confirmSelect、channel.waitForComfirms,唯一ID,
批量确认:缺陷重复批量发送
异步确认:channel.addConfirmListener中ConfirmListener接口handleAck和handleNack
8)消费者:
a)消息分发:多个消费者轮询
4.RabbitMQ管理
1)多租户和权限: 概念
rabbitmqctl:
a)add_vhost,list_vhost、delete_vhost
b)set_permissions,clear_permissions,list_permissions,list_user_permissions
2)用户管理:
rabbitmqctl:
add_user、change_password、authenticate_user、delete_user、list_users、set_user_tags
5.RabbitMQ集群
1)基础:RabbitMQ集群只适合本地局域网使用,所有节点只备份所有元数组信息(交换机、队列、绑定、vhost)、不会备份消息,节点类型分为内存(ram)和硬盘(disc)
2)配置步骤:
a)配置hosts,复制cookie
b)启动服务,加入节点,rabbitmqctl join_cluster rabbit@node1 --disc
其他命令:rabbitmqctl cluster_status、rabbitmqctl stop_app、rabbitmqctl reset、rabbitmqctl start_app
3)注意事项
a)关闭所有节点后,确保首先启动最后关闭节点
b)剔除节点 rabbitmqctl forget_cluster_node,所有节点断电等启动rabbitmqctl force_boot
c)集群扩容,既有元数组信息不会自动迁移,通过UI导出导入