当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-11-08 09:11:10 474观看
导读一、发送消息的几种方式1.1、默认交换机和routingKey----(个人不推荐使用) 使用默认的交换机exchange或routingKey。图片调用方法:图片1.2、使用指定routingKey的方式发送(默认的交换机) 使用默认的交换机,routin

一、发送消息的几种方式

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

    使用默认的交换机exchange或routingKey。3vN28资讯网——每日最新资讯28at.com

图片图片3vN28资讯网——每日最新资讯28at.com

调用方法:3vN28资讯网——每日最新资讯28at.com

图片图片3vN28资讯网——每日最新资讯28at.com

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

    使用默认的交换机,routingKey必须为quenue队列的名称。3vN28资讯网——每日最新资讯28at.com

调用方法:3vN28资讯网——每日最新资讯28at.com

图片图片3vN28资讯网——每日最新资讯28at.com

案例:3vN28资讯网——每日最新资讯28at.com

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

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

    使用指定的交换机,若绑定routingKey,必须使用指定的模式;若没有绑定,可设置为""。3vN28资讯网——每日最新资讯28at.com

调用方法:

图片图片3vN28资讯网——每日最新资讯28at.com

案例:

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))@RabbitHandlerpublic void receiveTestMsg2(@Payload String str) throws Exception{    log.info("开始接收消息。。。。。");    log.info("接收到的消息:"+str);}

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

    自动创建且交换机和队列绑定,key可指定也可不指定(默认为队列名称)。3vN28资讯网——每日最新资讯28at.com

/******************方案二:使用注解的方式绑定队列在交换机上*******************/    @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" : 即使配置出现了错误也不至于整个应用程序都启动失败的情况。3vN28资讯网——每日最新资讯28at.com

1、channel.basicQos(0, 1, false):0表示对消息的大小无限制,1表示每次只允许消费一条,false表示该限制不作用于channel。3vN28资讯网——每日最新资讯28at.com

同时,我们采用手工ACK的方式,因为我们配置文件配置了   spring.rabbitmq.listener.simple.acknowledge-mode=manual:3vN28资讯网——每日最新资讯28at.com

2、channel.basicAck(deliveryTag, false):deliveryTag表示处理的消息条数(一般为1),从heaers中取,false表示不批量ack。3vN28资讯网——每日最新资讯28at.com

/**     * 功能描述: 消费端加上手动确认消息被接收     * @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();        }    }

本文链接:http://www.28at.com/showinfo-26-17666-0.htmlRabbitMQ发送和接收消息的几种方式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一文搞定双链表,让你彻底弄懂线性表的链式实现

下一篇: SpringCloud Alibaba体系一览

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
Top