Rabbitmq中的channel接口常用方法详解

 更新时间:2023年09月01日 08:45:14   作者:轻尘×  
这篇文章主要介绍了Rabbitmq中的channel接口常用方法详解,为了确保消息一定被消费者处理,rabbitMQ提供了消息确认功能,就是在消费者处理完任务之后,就给服务器一个回馈,服务器就会将该消息删除,需要的朋友可以参考下

 channel接口常用方法

Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
                                 Map<String, Object> arguments) throws IOException;

方法作用:

声明一个队列

参数:queue

含义:队列名称

参数:durable

含义:是否持久化,如果设置为true,服务器重启了队列仍然存在

参数:exclusive

含义:是否为独享队列(排他性队列),只有自己可见的队列,即不允许其它用户访问

如果exclusive声明为true,则该队列的特点是:

1、只对首次声明它的连接(Connection)可见

2、会在其连接断开的时候自动删除。

参数:autoDelete

含义:当没有任何消费者使用时,自动删除该队列

参数:arguments

含义:其他参数 api解释

这里写图片描述

void basicQos(int prefetchCount) throws IOException;

解释: 方法作用: 一次获取多少个消息

参数:prefetchCount 含义:会告诉RabbitMQ不要同时给一个消费者推送多于prefetchCount个消息

String basicConsume(String queue, boolean autoAck, Consumer callback) throws IOException;

解释: 方法作用: 订阅消息并消费

参数:queue 含义:所订阅的队列

参数:autoAck 含义:是否开启自动应答,默认是开启的,如果需要手动应答应该设置为false

注意:为了确保消息一定被消费者处理,rabbitMQ提供了消息确认功能,就是在消费者处理完任务之后,就给服务器一个回馈,服务器就会将该消息删除,如果消费者超时不回馈,那么服务器将就将该消息重新发送给其他消费者,当autoAck设置为true时,只要消息被消费者处理,不管成功与否,服务器都会删除该消息,而当autoAck设置为false时,只有消息被处理,且反馈结果后才会删除。

参数:callback 含义:接收到消息之后执行的回调方法 看一下回调方法源码:

 void handleDelivery(String consumerTag,
                        Envelope envelope,
                        AMQP.BasicProperties properties,
                        byte[] body)
        throws IOException;
}

额,看不太懂,反正就是接到消息之后你对消息的处理都要写在这里!

之前我有一个RPC的例子,可以参考一下那里的这个方法如何实现的 //blog.csdn.net/leisure_life/article/details/78657935

void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException;

解释: 方法作用: 发布一个消息

参数:exchange

含义:指定转发器名称—-ExchangeName,这里用空字符串,就表示消息会交给默认的Exchange

参数:routingKey

含义:发布到哪个队列

参数:props

含义:和消息有关的其他配置参数,路由报头等

参数:body

含义:消息体

源码:

/**
     * Publish a message.
     *
     * Publishing to a non-existent exchange will result in a channel-level
     * protocol exception, which closes the channel.
     *
     * Invocations of <code>Channel#basicPublish</code> will eventually block if a
     * <a href="http://www.rabbitmq.com/alarms.html">resource-driven alarm</a> is in effect.
     *
     * @see com.rabbitmq.client.AMQP.Basic.Publish
     * @see <a href="http://www.rabbitmq.com/alarms.html">Resource-driven alarms</a>
     * @param exchange the exchange to publish the message to
     * @param routingKey the routing key
     * @param props other properties for the message - routing headers etc
     * @param body the message body
     * @throws java.io.IOException if an error is encountered
     */
    void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException;
 void basicAck(long deliveryTag, boolean multiple) throws IOException;

解释: 方法作用: 另外需要在每次处理完成一个消息后,手动向服务端发送一次应答。

参数:deliveryTag

含义:当前消息的类似编号的号码,服务端为每一个消息生成的类似编号的号码

参数:multiple

含义:是否把小于当前deliveryTag的小于都应答了

注意:这个要在打开应答机制后使用,

 boolean ack = false ; //打开应答机制  
 channel.basicConsume(QUEUE_NAME, ack, consumer);  

当multiple设置为false时,只会为deliveryTag所对应的消息进行应答,服务端收到应答后将该消息删除 源码:

 /**
     * Acknowledge one or several received
     * messages. Supply the deliveryTag from the {@link com.rabbitmq.client.AMQP.Basic.GetOk}
     * or {@link com.rabbitmq.client.AMQP.Basic.Deliver} method
     * containing the received message being acknowledged.
     * @see com.rabbitmq.client.AMQP.Basic.Ack
     * @param deliveryTag the tag from the received {@link com.rabbitmq.client.AMQP.Basic.GetOk} or {@link com.rabbitmq.client.AMQP.Basic.Deliver}
     * @param multiple true to acknowledge all messages up to and
     * including the supplied delivery tag; false to acknowledge just
     * the supplied delivery tag.
     * @throws java.io.IOException if an error is encountered
     */
    void basicAck(long deliveryTag, boolean multiple) throws IOException;

到此这篇关于Rabbitmq中的channel接口常用方法详解的文章就介绍到这了,更多相关channel接口常用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 理解 Java 核心基础精髓解析

    理解 Java 核心基础精髓解析

    这篇文章主要介绍了解 Java 核心基础精髓解析问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-03-03
  • java 中http请求为了防止乱码解决方案

    java 中http请求为了防止乱码解决方案

    这篇文章主要介绍了java 中http请求为了防止乱码解决方案的相关资料,需要的朋友可以参考下
    2017-02-02
  • Scheduler定时任务调度详解

    Scheduler定时任务调度详解

    文章介绍了SysJobServiceImpl类中定时任务调度的相关方法,包括清除、检查存在性、创建、暂停、恢复、删除任务,以及触发任务,并提到了JobKey、CronUtils、ScheduleUtils、SpringUtils等工具类的使用,适用于Spring管理环境
    2025-01-01
  • 解决新版idea新建文件没有XML和Resource Bundle文件问题

    解决新版idea新建文件没有XML和Resource Bundle文件问题

    这篇文章主要介绍了解决新版idea新建文件没有XML和Resource Bundle文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringMVC拦截器实现登录认证

    SpringMVC拦截器实现登录认证

    这篇文章主要介绍了SpringMVC拦截器实现登录认证的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • SpringBoot中的多个事务管理详解

    SpringBoot中的多个事务管理详解

    这篇文章主要介绍了SpringBoot中的多个事务管理详解,事务管理是一种组织和协调各种活动和资源的方法,以实现特定目标,它涉及规划、执行和监控各种任务,以确保项目或组织的顺利运行,需要的朋友可以参考下
    2023-10-10
  • 使用Java在线生成pdf文档的代码实现

    使用Java在线生成pdf文档的代码实现

    在实际的业务开发的时候,研发人员往往会碰到很多这样的一些场景,需要提供相关的电子凭证信息给用户,熟悉这块业务的童鞋,一定特别清楚,目前最常用的解决方案通过一些技术手段生成对应的PDF文件,下面小编给大家详细说说
    2025-04-04
  • springboot配置nacos的实现示例

    springboot配置nacos的实现示例

    本文将介绍如何在Spring Boot中配置Nacos,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    Spring MVC参数校验详解(关于`@RequestBody`返回`400`)

    这篇文章主要介绍了Spring MVC参数校验的相关资料,主要是针对`@RequestBody`返回`400`的问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • 详解Spring FactoryBean灵活创建复杂对象的秘密武器

    详解Spring FactoryBean灵活创建复杂对象的秘密武器

    FactoryBean是Spring框架中用于创建复杂Bean的接口,通过编程方式控制Bean的创建过程,它允许开发者自定义Bean的创建逻辑,适用于集成第三方库、延迟初始化、动态代理和统一管理资源等场景,本文介绍Spring FactoryBean创建复杂对象的相关操作,感兴趣的朋友一起看看吧
    2025-02-02

最新评论