赞
踩
之前我们聊过了MQ的模型,在开始代码实现之前先讲讲创建各个觉得的方法,因为本身每个方法的参数都很多加上源码不是很好理解,所以单独把每个方法及参数拿出来讲。
首先我们知道MQ分为生产者和消费者两部分,生产者生产消息并将消息放入队列,消费者负责监听队列,当队列中有消息时拿消息出来消费。我们就从这两个部分入手。
前面我们讲过MQ的工作原理,如下图,我们需要做的工作就是由生产者连接MQ并将消息发送给MQ再由消费者将消息拿来消费,这中间有几个角色,分别是信息通道Channel,交换机Exchange和队列Queue
- //=======================先创建与RabbitMQ的连接(建议抽成工类)=======================
- ConnectionFactory factory = new ConnectionFactory();
- //设置服务地址和端口
- factory.setHost("127.0.0.1");
- factory.setPort(5672);
- //设置账号信息,用户名、密码、vhost
- factory.setVirtualHost("/");
- factory.setUsername("guest");
- factory.setPassword("guest");
- //通过工厂拿到连接
- connection = factory.newConnection();
- /**
- *
- * @param channelNumber 要分配的通道编号
- * @return 返回一个信道对象,如果编号存在则返回null
- * @throws IOException if an I/O problem is encountered
- */
- Channel createChannel(int channelNumber) throws IOException;
- /**
- * 声明一个交换机。
- *
- * @param exchange 交换机名称
- * @param type 交换机类型(DIRECT, FANOUT, TOPIC, HEADERS;)
- * @param durable 是否开启持久化
- * @param autoDelete 在不被使用时是否自动删除
- * @param internal 是否能由客户端直接发布到该交换机
- * @param arguments 交换机其他构造参数
- * @return 返回一个声明成功的方法表明交换机被成功创建
- *
- */
- Exchange.DeclareOk exchangeDeclare(String exchange,
- BuiltinExchangeType type,
- boolean durable,
- boolean autoDelete,
- boolean internal,
- Map<String, Object> arguments) throws IOException;
交换机参数:
1.exchange:交换机名称
2.type:交换机类型(DIRECT, FANOUT, TOPIC, HEADERS)
3.durable:是否开启持久化,开启后交换机会在服务重启后重新加载
4.autoDelete:在不被使用时是否自动删除
5.internal:是否能由客户端直接发布到该交换机,如果为True的话表示当前Exchange是RabbitMQ内部使用,我们创建的Queue不会消费该类型交换机下的消息
6.arguments:交换机其他构造参数alternate-exchange:备用交换机名称(当前交换机不可用时发送至备用交换机)
- /**
- * 声明队列
- *
- * @param queue 队列名称
- * @param durable 是否开启持久化
- * @param exclusive 是否为独占队列
- * @param autoDelete 在不被使用时是否自动删除
- * @param arguments 队列其他构造参数
- * @return 返回一个声明成功的方法表明队列被成功创建
- *
- */
- Queue.DeclareOk queueDeclare(String queue,
- boolean durable,
- boolean exclusive,
- boolean autoDelete,
- Map<String, Object> arguments) throws IOException;
队列参数
1.queue 队列名称
2.durable 是否开启持久化,开启后队列会在服务重启后重新加载
3.exclusive 是否为独占队列,就是说声明为独占队列时,该队列只对当前连接connection可见,其他连接不可见,且在当前连接断开时会删除当前队列,注意这里断开会删除指的是connection断开不是channle断开
4.autoDelete 在不被使用时是否自动删除,指在所有消费者都断开后删除该队列并丢弃队列中的消息
5.arguments 队列其他构造参数x-expires:在自动删除队列之前,队列存活时间(单位毫秒)。
x-message-ttl:在队列中的消息被丢弃之前存活多长时间(单位毫秒)。
x-overflow:设置队列溢出行为。当达到队列的最大长度时消息会发生什么。有效值为drop-head、reject-publish或reject-publish-dlx。仲裁队列类型仅支持drop-head和reject-publish。
x-single-active-consumer:如果设置了Ture,同时只有一个消费者从队列中消费,如果当前消费者死亡才会转移到另一个存活消费者。
x-dead-letter-exchange:当消息被拒绝或者过期后将重新发送到指定名称的交换机。
x-dead-letter-routing-key:当消息被拒绝或者过期后将重新发送到绑定路由键的交换机。
x-max-length:队列最大长度,超过最大长度时将从头部开始丢弃消息。
x-max-length-bytes:队列最大大小,超过大小后将从头部开始丢弃消息。
x-max-priority:队列最大优先级数,如果未设置则不支持消息优先级。0-255,数值越大优先级越高。
x-queue-mode:开启队列懒加载,将消息保存在磁盘中在使用时从磁盘中加载。
x-queue-version:设置队列版本。默认为版本1。版本1有一个嵌入小消息的基于日志的索引。版本2有一个不同的索引,它在许多场景中改善了内存使用和性能,还为以前嵌入的消息提供了一个按队列存储。
x-queue-master-locator:镜像队列
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。