成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

RabbitMQ發送和接收消息的幾種方式

開發 前端
channel.basicQos(0, 1, false):0表示對消息的大小無限制,1表示每次只允許消費一條,false表示該限制不作用于channel。同時,我們采用手工ACK的方式,因為我們配置文件配置了 spring.rabbitmq.listener.simple.acknowledge-mode=manual。

一、發送消息的幾種方式

1.1、默認交換機和routingKey----(個人不推薦使用)

    使用默認的交換機exchange或routingKey。

圖片圖片

調用方法:

圖片圖片

1.2、使用指定routingKey的方式發送(默認的交換機)

    使用默認的交換機,routingKey必須為quenue隊列的名稱。

調用方法:

圖片圖片

案例:

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

1.3、指定交換機和routingKey的方式發送

    使用指定的交換機,若綁定routingKey,必須使用指定的模式;若沒有綁定,可設置為""。

調用方法:

圖片圖片

案例:

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();
        }
    }
責任編輯:武曉燕 來源: 程序猿小楊
相關推薦

2021-06-16 07:02:22

Python方式郵件

2020-07-14 09:58:01

Python開發工具

2021-05-10 15:05:18

消息通信本地網絡

2023-05-17 08:16:04

RabbitMQ消息傳遞

2024-08-12 12:17:03

2020-09-14 11:50:21

SpringBootRabbitMQJava

2023-10-13 10:44:35

OC消息發送

2021-05-07 16:19:36

異步編程Java線程

2010-09-25 14:48:55

SQL連接

2021-01-19 11:56:19

Python開發語言

2021-12-06 15:02:37

RabbitMQ系統消息

2023-12-04 09:23:49

分布式消息

2022-07-26 20:00:35

場景RabbitMQMQ

2020-10-14 08:36:10

RabbitMQ消息

2022-08-02 11:27:25

RabbitMQ消息路由

2010-07-20 11:03:45

Telnet會話

2021-08-10 09:59:15

RabbitMQ消息微服務

2023-09-07 13:21:00

Linux軟件

2023-02-08 08:43:55

前端繼承原型

2021-10-07 20:36:45

Redis集群場景
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品久久一区 | 都市激情亚洲 | 一本久久a久久精品亚洲 | 国产精品亚洲欧美日韩一区在线 | 久久99精品久久久久久秒播九色 | 精品久久久久久久 | 久久国产精品-国产精品 | 波多野结衣在线观看一区二区三区 | 国内自拍视频在线观看 | 99精品免费久久久久久久久日本 | 日韩高清一区 | 国产一区二区在线免费观看 | 久久综合九九 | 亚洲色图在线观看 | 少妇无套高潮一二三区 | 成人免费淫片aa视频免费 | 日韩精品一区二区三区 | 超碰在线观看97 | 免费观看的黄色网址 | 国产91在线 | 亚洲 | 在线视频h | 干干干操操操 | 激情91| 日韩视频一区二区在线 | 免费在线成人 | 日韩精品一区二区在线 | 狠狠涩 | 国产欧美日韩视频 | 国产精品亚洲一区 | 国产婷婷精品av在线 | 国产精品国产三级国产aⅴ无密码 | а天堂中文最新一区二区三区 | 久久久久国产精品人 | 午夜精品久久久久久久99黑人 | 激情一区二区三区 | 亚洲一区二区免费电影 | 国产色片在线 | 日韩视频在线观看中文字幕 | 国产精品免费在线 | 亚洲一区二区日韩 | 一级日批片 |