当前位置:   article > 正文

MQ消息队列(六)RabbitMQ如何创建交换机如何创建队列_rabbitmq手动创建交换机

rabbitmq手动创建交换机

         之前我们聊过了MQ的模型,在开始代码实现之前先讲讲创建各个觉得的方法,因为本身每个方法的参数都很多加上源码不是很好理解,所以单独把每个方法及参数拿出来讲。

        首先我们知道MQ分为生产者和消费者两部分,生产者生产消息并将消息放入队列,消费者负责监听队列,当队列中有消息时拿消息出来消费。我们就从这两个部分入手。

        前面我们讲过MQ的工作原理,如下图,我们需要做的工作就是由生产者连接MQ并将消息发送给MQ再由消费者将消息拿来消费,这中间有几个角色,分别是信息通道Channel,交换机Exchange和队列Queue

 1.创建连接

  1. //=======================先创建与RabbitMQ的连接(建议抽成工类)=======================
  2. ConnectionFactory factory = new ConnectionFactory();
  3. //设置服务地址和端口
  4. factory.setHost("127.0.0.1");
  5. factory.setPort(5672);
  6. //设置账号信息,用户名、密码、vhost
  7. factory.setVirtualHost("/");
  8. factory.setUsername("guest");
  9. factory.setPassword("guest");
  10. //通过工厂拿到连接
  11. connection = factory.newConnection();

2.创建信道

  1. /**
  2. *
  3. * @param channelNumber 要分配的通道编号
  4. * @return 返回一个信道对象,如果编号存在则返回null
  5. * @throws IOException if an I/O problem is encountered
  6. */
  7. Channel createChannel(int channelNumber) throws IOException;

3.创建交换机

  1. /**
  2. * 声明一个交换机。
  3. *
  4. * @param exchange 交换机名称
  5. * @param type 交换机类型(DIRECT, FANOUT, TOPIC, HEADERS;)
  6. * @param durable 是否开启持久化
  7. * @param autoDelete 在不被使用时是否自动删除
  8. * @param internal 是否能由客户端直接发布到该交换机
  9. * @param arguments 交换机其他构造参数
  10. * @return 返回一个声明成功的方法表明交换机被成功创建
  11. *
  12. */
  13. Exchange.DeclareOk exchangeDeclare(String exchange,
  14. BuiltinExchangeType type,
  15. boolean durable,
  16. boolean autoDelete,
  17. boolean internal,
  18. 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:备用交换机名称(当前交换机不可用时发送至备用交换机)

4.创建队列

  1. /**
  2. * 声明队列
  3. *
  4. * @param queue 队列名称
  5. * @param durable 是否开启持久化
  6. * @param exclusive 是否为独占队列
  7. * @param autoDelete 在不被使用时是否自动删除
  8. * @param arguments 队列其他构造参数
  9. * @return 返回一个声明成功的方法表明队列被成功创建
  10. *
  11. */
  12. Queue.DeclareOk queueDeclare(String queue,
  13. boolean durable,
  14. boolean exclusive,
  15. boolean autoDelete,
  16. 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:镜像队列

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/639573
推荐阅读
相关标签
  

闽ICP备14008679号