日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

RabbitMQ發(fā)送和接收消息的幾種方式

來源: 責(zé)編: 時(shí)間:2023-11-08 09:11:10 320觀看
導(dǎo)讀一、發(fā)送消息的幾種方式1.1、默認(rèn)交換機(jī)和routingKey----(個(gè)人不推薦使用) 使用默認(rèn)的交換機(jī)exchange或routingKey。圖片調(diào)用方法:圖片1.2、使用指定routingKey的方式發(fā)送(默認(rèn)的交換機(jī)) 使用默認(rèn)的交換機(jī),routin

一、發(fā)送消息的幾種方式

1.1、默認(rèn)交換機(jī)和routingKey----(個(gè)人不推薦使用)

    使用默認(rèn)的交換機(jī)exchange或routingKey。Dic28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Dic28資訊網(wǎng)——每日最新資訊28at.com

調(diào)用方法:Dic28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Dic28資訊網(wǎng)——每日最新資訊28at.com

1.2、使用指定routingKey的方式發(fā)送(默認(rèn)的交換機(jī))

    使用默認(rèn)的交換機(jī),routingKey必須為quenue隊(duì)列的名稱。Dic28資訊網(wǎng)——每日最新資訊28at.com

調(diào)用方法:Dic28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Dic28資訊網(wǎng)——每日最新資訊28at.com

案例:Dic28資訊網(wǎng)——每日最新資訊28at.com

/** * @Author yangyalin * @Description 測試發(fā)送消息(直接使用隊(duì)列發(fā)送,使用默認(rèn)的交換機(jī)) routingKey:即為對(duì)列的名稱即可 **/public void testSendMsg(String message){    rabbitTemplate.convertAndSend(RabbitMQConvertConfig.TEST_QUEUE,message);}

1.3、指定交換機(jī)和routingKey的方式發(fā)送

    使用指定的交換機(jī),若綁定routingKey,必須使用指定的模式;若沒有綁定,可設(shè)置為""。Dic28資訊網(wǎng)——每日最新資訊28at.com

調(diào)用方法:

圖片圖片Dic28資訊網(wǎng)——每日最新資訊28at.com

案例:

public void sendDecreStockMessage(DecreStockFromRabbit decreStockFromRabbit){    CorrelationData correlationData = new CorrelationData();    correlationData.setId(decreStockFromRabbit.getMessageId());  /**   * exchange:交換機(jī)  routingKey:路由鍵  message:消息體內(nèi)容   correlationData:消息唯一ID  **/    rabbitTemplate.convertAndSend(RabbitMQConvertConfig.ORDER_EXCHANGE,        RabbitMQConvertConfig.ORDER_ROUTINGKEY, decreStockFromRabbit,correlationData);}或:rabbitTemplate.convertAndSend("test-exchange","",message);

二、接收消息的幾種方式

2.1、默認(rèn)交換機(jī),提前創(chuàng)建好隊(duì)列(TestDirectQueue)

/**     * 功能描述:當(dāng)消費(fèi)同一個(gè)隊(duì)列的時(shí)候,可通過設(shè)置實(shí)現(xiàn)能則多勞,     * 消息輪詢方式訂閱     * @MethodName: process11     * @MethodParam: [testMessage]     * @Return: void     * @Author: yyalin     * @CreateDate: 2022/4/9 17:10     */    @RabbitListener(queues = "TestDirectQueue")   //監(jiān)聽的隊(duì)列名稱 TestDirectQueue    public void process11(Map testMessage) throws InterruptedException {        log.info("消費(fèi)者收到消息222:" + testMessage.toString());        Thread.sleep(200);    }

2.2、默認(rèn)交換機(jī),自動(dòng)創(chuàng)建隊(duì)列(TEST_QUEUE2)

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

2.3、自動(dòng)創(chuàng)建交換機(jī)和隊(duì)列----(個(gè)人推薦)

    自動(dòng)創(chuàng)建且交換機(jī)和隊(duì)列綁定,key可指定也可不指定(默認(rèn)為隊(duì)列名稱)。Dic28資訊網(wǎng)——每日最新資訊28at.com

/******************方案二:使用注解的方式綁定隊(duì)列在交換機(jī)上*******************/    @RabbitListener(bindings = @QueueBinding(value=@Queue(name="directQueue"),            exchange=@Exchange(name="directExchange",type = ExchangeTypes.DIRECT),            key={"red", "blue"}    ))    //監(jiān)聽的隊(duì)列名稱 TestDirectQueue    public void directConsumer(String message) {        log.info("消費(fèi)者收到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("消費(fèi)者收到topic消息888  : " + message);    }

備注:ignoreDeclarationExceptions = "true" : 即使配置出現(xiàn)了錯(cuò)誤也不至于整個(gè)應(yīng)用程序都啟動(dòng)失敗的情況。Dic28資訊網(wǎng)——每日最新資訊28at.com

1、channel.basicQos(0, 1, false):0表示對(duì)消息的大小無限制,1表示每次只允許消費(fèi)一條,false表示該限制不作用于channel。Dic28資訊網(wǎng)——每日最新資訊28at.com

同時(shí),我們采用手工ACK的方式,因?yàn)槲覀兣渲梦募渲昧?  spring.rabbitmq.listener.simple.acknowledge-mode=manual:Dic28資訊網(wǎng)——每日最新資訊28at.com

2、channel.basicAck(deliveryTag, false):deliveryTag表示處理的消息條數(shù)(一般為1),從heaers中取,false表示不批量ack。Dic28資訊網(wǎng)——每日最新資訊28at.com

/**     * 功能描述: 消費(fèi)端加上手動(dòng)確認(rèn)消息被接收     * @MethodName: process     * @MethodParam: [message]     * @Return: void     * @Author: yyalin     * @CreateDate: 2022/4/18 19:10     */    @RabbitListener(queues = "TestDirectQueue3")    //監(jiān)聽的隊(duì)列名稱 TestDirectQueue    public void process(String message, Channel channel) throws IOException {        log.info("DirectReceiver消費(fèi)者收到消息1  : " + message);        long msgId=1111L; //消息ID        try {            //手動(dòng)確認(rèn)消息已消費(fèi)            channel.basicAck(msgId,false);        } catch (IOException e) {            //把消息失敗的消息重新放入到隊(duì)列            channel.basicNack(msgId,false,true);            e.printStackTrace();        }    }

本文鏈接:http://www.www897cc.com/showinfo-26-17666-0.htmlRabbitMQ發(fā)送和接收消息的幾種方式

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 一文搞定雙鏈表,讓你徹底弄懂線性表的鏈?zhǔn)綄?shí)現(xiàn)

下一篇: SpringCloud Alibaba體系一覽

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 松桃| 阿荣旗| 金平| 孟津县| 泌阳县| 曲靖市| 蒙山县| 郓城县| 化德县| 汉寿县| 游戏| 兴隆县| 纳雍县| 密山市| 凤冈县| 辽源市| 安远县| 康平县| 秭归县| 澜沧| 化德县| 陇南市| 曲周县| 霍林郭勒市| 永兴县| 商城县| 凭祥市| 民丰县| 乐东| 勐海县| 安顺市| 杨浦区| 昌黎县| 奉节县| 庆元县| 长白| 五大连池市| 木里| 多伦县| 饶河县| 黑水县|