RabbitMQ的学习
1.MQ
消息队列,接收并转发消息
队列先进先出的特性
2.消息队列的特性
1.与业务无关;
2.FIFO
3.容灾:消息持久化,服务器崩了,重启后仍然能找到消息。
4.性能
3.消息队列的优点
1)系统解耦:消费者和使用者可以不在同一台主机上;
2)异步调用:不必等使用者完成所有业务才返回结果;
3)流量削峰:过多的请求排队处理,不会压溃服务器。
4.消息流转过程
1)生产者将消息交给交换机(Exchange),并指定路由键;
2)交换机可以与多个消息队列绑定,通过路由键可以找到指定消息队列,然后将消息放进消息队列。
3)消费者与消息队列进行绑定,监听着消息队列。
5.多个消费者共享一个消息队列的消息分配原则
1)数量平均原则 : 一个消息分配一个,循环调度;
2)公平派遣 : 消息手动确认,处理完一个消息分配下一个消息,时间平均。
6.RabbitMQ的使用流程
1)创建连接工厂:ConnectionFactory factory = new ConnectionFactory();
2) 输入MQ的主机、用户名、密码:factory.set...();
3) 获取连接: Connection connection = factory.newConnection();
4) 创建信道: Channel channel = connection.createChannel();
5) 生产消息: channel.basicPublish();
6)关闭信道,关闭连接。
或
5)消费消息:channel.basicConsume();
7.交换机的类型
交换机的使用:
生产者发送消息前要指定交换机:
channel.exchangeDeclare() - 声明交换机;
channel.basicPublish() - 绑定交换机;
消费者接收消息时要将消息队列绑定指交换机:
channel.exchangeDeclare() - 声明交换机;
channel.queueDeclare().getQueue() - 声明临时队列,监听消息队列的进程被销毁时也被销毁;
channel.queueBind() - 将消息队列绑定到指定交换机
channel.basicConsume() - 监听消费消息。
交换机的类型:
1)fanout - 广播形式,所有与交换机绑定的消息队列都收到消息。
2)derect - 指定形式,生产者生产消息时指定交换机并且指定消息的路由键;消费者消费时将自创建的消息队列与交换机进行路由键绑定。
3)topic - 指定种类形式,生产者生产消息时指定交换机并且指定路由键,消费者消费时将自创建的消息队列与交换机进行模糊的路由键绑定(*:代表一个单词, #:代表0个或多个单词)。