您当前的位置:首页 > 电脑百科 > 网络技术 > 网络设置

RabbitMQ发送和接收消息的几种方式

时间:2023-11-08 14:13:27  来源:微信公众号  作者:程序猿羊

channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。同时,我们采用手工ACK的方式,因为我们配置文件配置了 spring.rabbitmq.listener.simple.acknowledge-mode=manual。

一、发送消息的几种方式

1.1、默认交换机和routingKey----(个人不推荐使用)

    使用默认的交换机exchange或routingKey。

RabbitMQ发送和接收消息的几种方式图片

调用方法:

RabbitMQ发送和接收消息的几种方式图片

1.2、使用指定routingKey的方式发送(默认的交换机)

    使用默认的交换机,routingKey必须为quenue队列的名称。

调用方法:

RabbitMQ发送和接收消息的几种方式图片

案例:

/**
 * @Author yangyalin
 * @Description 测试发送消息(直接使用队列发送,使用默认的交换机) routingKey:即为对列的名称即可
 **/
public void testSendMsg(String message){
    rabbitTemplate.convertAndSend(RabbitMQConvertConfig.TEST_QUEUE,message);
}

1.3、指定交换机和routingKey的方式发送

    使用指定的交换机,若绑定routingKey,必须使用指定的模式;若没有绑定,可设置为""。

调用方法:

RabbitMQ发送和接收消息的几种方式图片

案例:

public void sendDecreStockMessage(DecreStockFromRabbit decreStockFromRabbit){
    CorrelationData correlationData = new CorrelationData();
    correlationData.setId(decreStockFromRabbit.getMessageId());
  /**
   * exchange:交换机  routingKey:路由键  message:消息体内容   correlationData:消息唯一ID
  **/
    rabbitTemplate.convertAndSend(RabbitMQConvertConfig.ORDER_EXCHANGE,
        RabbitMQConvertConfig.ORDER_ROUTINGKEY, decreStockFromRabbit,correlationData);
}
或:
rabbitTemplate.convertAndSend("test-exchange","",message);

二、接收消息的几种方式

2.1、默认交换机,提前创建好队列(TestDirectQueue)

/**
     * 功能描述:当消费同一个队列的时候,可通过设置实现能则多劳,
     * 消息轮询方式订阅
     * @MethodName: process11
     * @MethodParam: [testMessage]
     * @Return: void
     * @Author: yyalin
     * @CreateDate: 2022/4/9 17:10
     */
    @RabbitListener(queues = "TestDirectQueue")   //监听的队列名称 TestDirectQueue
    public void process11(Map testMessage) throws InterruptedException {
        log.info("消费者收到消息222:" + testMessage.toString());
        Thread.sleep(200);
    }

2.2、默认交换机,自动创建队列(TEST_QUEUE2)

@RabbitListener(queuesToDeclare=@Queue(TopicExchangeConfig.TEST_QUEUE2))
@RabbitHandler
public void receiveTestMsg2(@Payload String str) throws Exception{
    log.info("开始接收消息。。。。。");
    log.info("接收到的消息:"+str);
}

2.3、自动创建交换机和队列----(个人推荐)

    自动创建且交换机和队列绑定,key可指定也可不指定(默认为队列名称)。

/******************方案二:使用注解的方式绑定队列在交换机上*******************/
    @RabbitListener(bindings = @QueueBinding(value=@Queue(name="directQueue"),
            exchange=@Exchange(name="directExchange",type = ExchangeTypes.DIRECT),
            key={"red", "blue"}
    ))    //监听的队列名称 TestDirectQueue
    public void directConsumer(String message) {
        log.info("消费者收到direct消息555  : " + message);
    }


   @RabbitListener(bindings = @QueueBinding(value=@Queue(name="topicQueue2"),
            exchange=@Exchange(name="topicExchange",type = ExchangeTypes.TOPIC,ignoreDeclarationExceptions = "true"),
            key="#.new"
    ))
    public void topicConsumer2(String message) {
        log.info("消费者收到topic消息888  : " + message);
    }

备注:ignoreDeclarationExceptions = "true" : 即使配置出现了错误也不至于整个应用程序都启动失败的情况。

1、channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。

同时,我们采用手工ACK的方式,因为我们配置文件配置了   spring.rabbitmq.listener.simple.acknowledge-mode=manual:

2、channel.basicAck(deliveryTag, false):deliveryTag表示处理的消息条数(一般为1),从heaers中取,false表示不批量ack。

/**
     * 功能描述: 消费端加上手动确认消息被接收
     * @MethodName: process
     * @MethodParam: [message]
     * @Return: void
     * @Author: yyalin
     * @CreateDate: 2022/4/18 19:10
     */
    @RabbitListener(queues = "TestDirectQueue3")    //监听的队列名称 TestDirectQueue
    public void process(String message, Channel channel) throws IOException {
        log.info("DirectReceiver消费者收到消息1  : " + message);
        long msgId=1111L; //消息ID
        try {
            //手动确认消息已消费
            channel.basicAck(msgId,false);
        } catch (IOException e) {
            //把消息失败的消息重新放入到队列
            channel.basicNack(msgId,false,true);
            e.printStackTrace();
        }
    }


Tags:RabbitMQ   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
RabbitMQ如何实现延迟队列?
延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息。延迟队列的使用场景有以下几种: 未按时支付的订单,30 分钟过期之后取消订单。 给活...【详细内容】
2024-01-26  Search: RabbitMQ  点击:(46)  评论:(0)  加入收藏
RabbitMQ消息顺序性解密:保证消息的正确顺序
在分布式系统中,保证消息的正确顺序对于一些应用场景至关重要。而RabbitMQ作为一种流行的消息队列系统,本身并不提供严格的消息顺序保证。下面将探讨如何在使用RabbitMQ时实现...【详细内容】
2023-12-04  Search: RabbitMQ  点击:(126)  评论:(0)  加入收藏
RabbitMQ与消息限流策略的完美结合
在当今互联网时代,高并发访问已成为许多应用系统面临的常见挑战之一。对于需要处理大量请求的系统来说,如何保证系统的稳定性和可靠性是一个关键问题。RabbitMQ作为一种可靠的...【详细内容】
2023-11-27  Search: RabbitMQ  点击:(165)  评论:(0)  加入收藏
实时协作的秘诀:RabbitMQ与WebSockets的结合
实时协作是现代软件开发中非常重要的一个方面。为了实现实时协作,一种常见的做法是将消息队列与WebSocket技术相结合。其中,RabbitMQ是一个功能强大的消息队列系统,它能够有效...【详细内容】
2023-11-21  Search: RabbitMQ  点击:(176)  评论:(0)  加入收藏
RabbitMQ中的消息持久化策略与存储优化实践
本文将介绍RabbitMQ中的消息持久化策略,并提供一些存储优化的实践方法,帮助您确保消息的可靠性和系统的性能。在RabbitMQ消息队列中,消息的可靠性传输和持久化是非常重要的。下...【详细内容】
2023-11-15  Search: RabbitMQ  点击:(241)  评论:(0)  加入收藏
Centos7下安装部署RabbitMQ,看这篇就够了
前言RabbitMQ是一个开源的强大的企业消息系统,支持主流的操作系统,支持多种开发语言。我们项目中使用RabbitMQ作为消息队列,解耦业务,构建高可靠的消息队列系统。RabbitMQ可以...【详细内容】
2023-11-09  Search: RabbitMQ  点击:(306)  评论:(0)  加入收藏
RabbitMQ发送和接收消息的几种方式
channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。同时,我们采用手工ACK的方式,因为我们配置文件配置了 spri...【详细内容】
2023-11-08  Search: RabbitMQ  点击:(261)  评论:(0)  加入收藏
RabbitMQ的四种交换机详解
交换机主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout。图片一、to...【详细内容】
2023-11-06  Search: RabbitMQ  点击:(264)  评论:(0)  加入收藏
深入浅出RabbitMQ:顺序消费、死信队列和延时队列
1. 引言在今天的文章中,我们来聊一聊 RabbitMQ,这是小 ❤ 在工作中用的最早的消息中间件,主要用于大量数据的异步消费。2. RabbitMQ2.1 核心组件RabbitMQ 是一个开源的消息中间...【详细内容】
2023-11-03  Search: RabbitMQ  点击:(178)  评论:(0)  加入收藏
在Linux系统中实现容器化的消息中间件:RabbitMQ和Kafka
消息中间件在现代分布式系统中起着至关重要的作用。它们可以在不同的应用程序之间实现可靠的异步通信,提供高吞吐量、低延迟和可扩展性。下面将介绍如何在Linux系统中使用容...【详细内容】
2023-09-08  Search: RabbitMQ  点击:(374)  评论:(0)  加入收藏
▌简易百科推荐
iPhone或iPad用户必学:如何通过二维码快速共享Wi-Fi密码,简单又实用!
你有没有想过在不泄露网络密码的情况下与客人共享你的家庭或工作Wi-Fi?你肯定不是第一个这样想的人,我们很高兴地通知你,多亏了以下这个的变通方法,你现在可以使用iPhone或iPad...【详细内容】
2024-01-22  驾驭信息纵横科技    Tags:Wi-Fi密码   点击:(61)  评论:(0)  加入收藏
Windows 11网络连接问题诊断与解决小技巧,轻松解决上网问题!
在日常生活中,如果在连接网络时遇到问题,该如何排查解决?以下是一些故障排除步骤,可帮助你解决戴尔电脑上的无线网络连接问题。一起来看看吧!1、进行基本检查先进行一些基本检查...【详细内容】
2024-01-12  戴尔维修工程师    Tags:   点击:(58)  评论:(0)  加入收藏
配置Cisco AnyConnect VPN的5个步骤,缺一不可
随着越来越多的人远程工作或在混合环境中工作,IT部门和MSP在ASA防火墙上配置Cisco AnyConnect VPN的呼声越来越高。但是Cisco文档可能会非常混乱,这会导致一些组织的配置错误(...【详细内容】
2023-11-14  驾驭信息纵横科技    Tags:VPN   点击:(90)  评论:(0)  加入收藏
如何在Windows 10系统上设置DNS?
如果你正在使用Windows10操作系统,并且想要更好地控制你的网络服务,那么了解如何设置DNS(DomainNameSystem)是非常重要的。DNS是一种将域名解析为IP地址的服务,它能够让你在访问...【详细内容】
2023-11-10  高梦文    Tags:DNS   点击:(188)  评论:(0)  加入收藏
RabbitMQ发送和接收消息的几种方式
channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。同时,我们采用手工ACK的方式,因为我们配置文件配置了 spri...【详细内容】
2023-11-08  程序猿羊  微信公众号  Tags:RabbitMQ   点击:(261)  评论:(0)  加入收藏
CISA发布十大常见网络安全错误配置
美国国家安全局(NSA)和网络安全与基础设施安全局(CISA)在本周五的报告中公布了其红队和蓝队在大型组织网络中发现的十大最常见网络安全误配置。NSA和CISA在安全建议中详细说...【详细内容】
2023-11-07  GoUpSec  微信公众号  Tags:CISA   点击:(254)  评论:(0)  加入收藏
Istio Envoy 配置解读,看这篇就够了
前面我们创建了一个 Gateway 和 VirtualService 对象,用来对外暴露应用,然后我们就可以通过 ingressgateway 来访问 Bookinfo 应用了。那么这两个资源对象是如何实现的呢?Gatew...【详细内容】
2023-11-07  k8s技术圈  微信公众号  Tags:Istio Envoy   点击:(128)  评论:(0)  加入收藏
RabbitMQ的四种交换机详解
交换机主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout。图片一、to...【详细内容】
2023-11-06  程序猿小杨  微信公众号  Tags:交换机   点击:(264)  评论:(0)  加入收藏
路由器配置NAT/UPNP/DMZ方法
常见路由器配置NAT(网络地址转换)、UPnP(通用即插即用)和DMZ(区域暴露)的方法可以根据不同的路由器品牌和型号有所不同,但通常会在路由器的管理界面中找到相关设置。以下是一般步骤...【详细内容】
2023-10-11  晴间多云  今日头条  Tags:路由器配置   点击:(415)  评论:(0)  加入收藏
路由器如何正确安装?后台设置一步即可接入宽带
现在的路由器不论安装还是后台设置都非常方便,但一些网友可能是没有详细了解过相关的知识,所以每次想要更换路由器或者新装路由器的时候并不知道如何安装路由器接入自家宽带,这...【详细内容】
2023-09-21  羽度非凡    Tags:路由器   点击:(292)  评论:(0)  加入收藏
站内最新
站内热门
站内头条