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

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

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

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

 1.创建连接

            //=======================先创建与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();

2.创建信道

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

3.创建交换机

    /**
     * 声明一个交换机。
     *
     * @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:备用交换机名称(当前交换机不可用时发送至备用交换机)

4.创建队列

    /**
     * 声明队列
     * 
     * @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:镜像队列

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值