国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ系列(18)--RabbitMQ基于插件實現(xiàn)延遲隊列

這篇具有很好參考價值的文章主要介紹了RabbitMQ系列(18)--RabbitMQ基于插件實現(xiàn)延遲隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、前往RabbitMQ官網(wǎng)下載往RabbitMQ添加延遲消息的插件

RabbitMQ官網(wǎng)下載插件的網(wǎng)址:https://www.rabbitmq.com/community-plugins.html

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

2、下載rabbitmq_delayer_message_exchange插件(注:RabbitMQ是什么版本的,下載的插件就得是什么版本的,得對應(yīng)上,以下截圖為官方文檔的對插件版本的要求說明)?

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmqrabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

?3、把這個插件傳輸?shù)椒?wù)器上

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

4、根據(jù)官網(wǎng)的指示把插件放到RabbitMQ指定的文件夾下

RabbitMQ官網(wǎng)指示安裝插件步驟的網(wǎng)址:https://www.rabbitmq.com/installing-plugins.html

我這里安裝RabbitMQ的系統(tǒng)是CentOS,所以放在

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

5、拷貝插件到指定的目錄下

例:

cp rabbitmq_delayed_message_exchange-3.10.0.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins/

效果圖:

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

?6、安裝延遲隊列插件

輸入以下命令安裝延遲隊列插件

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

效果圖:

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

7、重啟RabbitMQ

輸入以下命令重啟RabbitMQ

systemctl restart rabbitmq-server.service

效果圖:

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

8、查看插件是否安裝成功

?進(jìn)入RabbitMQ的管理頁面,進(jìn)入Exchange的管理頁面,新增Exchange,在Type里面可以看到x-delayed-message的選項,證明延遲隊列插件安裝成功rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

9、基于插件實現(xiàn)延遲隊列的原理示意圖

原先我們沒下插件之前實現(xiàn)延遲隊列是基于圖下這種方式實現(xiàn)的

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

但我們下載插件后就能通過交換機延遲消息的方式來實現(xiàn)消息的延遲了(由步驟8可見,我們驗證插件是否安裝成功是從Exchange進(jìn)去的,而不是從Queues進(jìn)去的)

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

10、基于插件延遲隊列的代碼實現(xiàn)

(1)在config包里新建一個名為DelayedQueueConfig的類用于編寫配置隊列延遲的代碼

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

代碼如下:

package com.ken.springbootrqbbitmq.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class DelayedQueueConfig {

    //隊列
    public static final String DELAYED_QUEUE_NAME = "delayed_queue";

    //交換機
    public static final String DELAYED_EXCHANGE_NAME = "DELAYED_EXCHANGE";

    //交換機
    public static final String DELAYED_ROUTING_KEY = "delayed";

    //聲明延遲隊列
    @Bean
    public Queue delayedQueue() {
        return new Queue(DELAYED_QUEUE_NAME);
    }

    //聲明延遲交換機
    @Bean
    public CustomExchange delayedExchange() {
        Map<String, Object> arguments = new HashMap<>(3);
        //設(shè)置延遲類型
        arguments.put("x-delayed-type","direct");
        /**
         * 聲明自定義交換機
         * 第一個參數(shù):交換機的名稱
         * 第二個參數(shù):交換機的類型
         * 第三個參數(shù):是否需要持久化
         * 第四個參數(shù):是否自動刪除
         * 第五個參數(shù):其他參數(shù)
         */
        return new CustomExchange(DELAYED_QUEUE_NAME,"x-delayed-message",true,false,arguments);
    }

    //綁定隊列和延遲交換機
    @Bean
    public Binding delayedQueueBindingDelayedExchange(@Qualifier("delayedQueue") Queue delayedQueue,
                                                      @Qualifier("delayedExchange") Exchange delayedExchange) {
        return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(DELAYED_ROUTING_KEY).noargs();
    }

}

?(2)在SendMsgController類里寫一個接口,讓其能往延遲隊列里發(fā)送消息

代碼如下:

package com.ken.springbootrqbbitmq.controller;

import com.ken.springbootrqbbitmq.config.DelayedQueueConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**
 * 發(fā)送延遲消息
 */
@Slf4j
@RequestMapping("ttl")
@RestController
public class SendMsgController {

    @Autowired(required = false)
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/sendMsg/{message}")
    public void sendMsg(@PathVariable String message) {
        log.info("當(dāng)前時間:{},發(fā)送一條消息給兩個TTL隊列:{}",new Date(),message);
        rabbitTemplate.convertAndSend("normal_exchange","normal01","消息來著ttl為10s的隊列:" + message);
        rabbitTemplate.convertAndSend("normal_exchange","normal02","消息來著ttl為40s的隊列:" + message);
    }

    @GetMapping("/sendExpirationMsg/{message}/{ttlTime}")
    public void sendMsg(@PathVariable String message,@PathVariable String ttlTime) {
        log.info("當(dāng)前時間:{},發(fā)送一條時長{}毫秒的TTL消息給normal03隊列:{}", new Date(),ttlTime,message);
        rabbitTemplate.convertAndSend("normal_exchange","normal03",message,msg -> {
            //發(fā)送消息的時候延遲時長
            msg.getMessageProperties().setExpiration(ttlTime);
            return msg;
        });
    }

    /**
     * 給延遲隊列發(fā)送消息
     * @param message
     * @param delayTime
     */
    @GetMapping("/sendDelayMsg/{message}/{delayTime}")
    public void sendMsg(@PathVariable String message,@PathVariable Integer delayTime) {
        log.info("當(dāng)前時間:{},發(fā)送一條時長{}毫秒的消息給延遲隊列:{}", new Date(),delayTime,message);
        rabbitTemplate.convertAndSend(DelayedQueueConfig.DELAYED_QUEUE_NAME,DelayedQueueConfig.DELAYED_ROUTING_KEY,message, msg -> {
            //發(fā)送消息的時候延遲時長
            msg.getMessageProperties().setDelay(delayTime);
            return msg;
        });
    }

}

(3)在consumer包里新建一個名為DelayQueueConsumer的類用于編寫消費延遲隊列的消費者代碼

效果圖:

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

代碼如下:

package com.ken.springbootrqbbitmq.consumer;

import com.ken.springbootrqbbitmq.config.DelayedQueueConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 延遲隊列消費者
 */
@Slf4j
@Component
public class DelayQueueConsumer {

    @RabbitListener(queues = DelayedQueueConfig.DELAYED_QUEUE_NAME)
    private void receiveDelayQueue(Message message) {
        String msg = new String(message.getBody());
        log.info("當(dāng)前時間{},收到延遲隊列的消息",new Date(),msg);
    }

}

(4)啟動項目,往瀏覽器輸入接口地址和參數(shù),從而調(diào)用接口

[1]第一條消息

http://localhost:8080/ttl/sendDelayMsg/我是第一條消息/20000

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

[2]第二條消息

http://localhost:8080/ttl/sendDelayMsg/我是第二條消息/2000

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

效果圖:

rabbitmq 安裝延時插件,rabbitmq,rabbitmq,java-rabbitmq

結(jié)論:基于測試發(fā)現(xiàn)在使用延遲插件的情況下,延遲時間短的消息會被先消費,這證明基于插件的延遲消息達(dá)到預(yù)期效果文章來源地址http://www.zghlxwxcb.cn/news/detail-597116.html

到了這里,關(guān)于RabbitMQ系列(18)--RabbitMQ基于插件實現(xiàn)延遲隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Docker版RabbitMQ安裝延遲隊列插件及延遲隊列項目應(yīng)用實戰(zhàn)

    Docker版RabbitMQ安裝延遲隊列插件及延遲隊列項目應(yīng)用實戰(zhàn)

    在項目中經(jīng)常有延遲業(yè)務(wù)處理的背景,此時可以借助于Rabbitmq的延遲隊列進(jìn)行實現(xiàn),但Rabbitmq本身并不支持延遲隊列,但可以通過安裝插件的方式實現(xiàn)延遲隊列 首先確認(rèn)目前項目使用的Rabbitmq的版本,這里博主的版本是3.9.15的。 訪問 Rabbitmq的github網(wǎng)址,檢索 delay 找到插件 rabb

    2024年02月02日
    瀏覽(27)
  • liunx+docker+rabbitmq安裝延遲隊列插件

    liunx+docker+rabbitmq安裝延遲隊列插件

    前言 在這篇文章中,我們將討論如何在 Linux 系統(tǒng)上安裝 Docker 和 RabbitMQ,并設(shè)置延遲隊列。 Docker 是一個開放源代碼的軟件,它可以使應(yīng)用程序的部署更加簡單,而 RabbitMQ 是一個開放源代碼的消息代理軟件,它接受和轉(zhuǎn)發(fā)消息。 延遲隊列是一種在特定的延遲之后才開始處理

    2024年02月11日
    瀏覽(19)
  • Docker中為RabbitMQ安裝rabbitmq_delayed_message_exchange延遲隊列插件

    Docker中為RabbitMQ安裝rabbitmq_delayed_message_exchange延遲隊列插件

    1、前言 rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延遲消息傳遞(或計劃消息傳遞)的插件。 插件下載地址:https://www.rabbitmq.com/community-plugins.html 1、下載插件 首先需要確定我們當(dāng)前使用的RabbitMQ的版本,我們可以直接登錄Web端的管理界面查看版本 ? 也可以在RabbitMQ容器中

    2024年02月12日
    瀏覽(27)
  • RabbitMQ實現(xiàn)延遲消息的方式-死信隊列、延遲隊列和惰性隊列

    當(dāng)一條消息因為一些原因無法被成功消費,那么這這條消息就叫做死信,如果包含死信的隊列配置了dead-letter-exchange屬性指定了一個交換機,隊列中的死信都會投遞到這個交換機內(nèi),這個交換機就叫死信交換機,死信交換機再綁定一個隊列,死信最終會進(jìn)入到這個存放死信的

    2024年02月19日
    瀏覽(94)
  • RabbitMQ之TTL+死信隊列實現(xiàn)延遲隊列

    RabbitMQ是一個流行的消息隊列系統(tǒng),它提供了許多有用的功能,其中之一是TTL(Time To Live)和死信隊列。這些功能可以用來實現(xiàn)延遲隊列,讓我們來看看如何使用它們。 首先,什么是TTL?TTL是消息的存活時間,它可以設(shè)置為一個特定的時間段。如果消息在這個時間段內(nèi)沒有被

    2024年02月13日
    瀏覽(18)
  • Springboot集成rabbitmq——實現(xiàn)延遲隊列

    Springboot集成rabbitmq——實現(xiàn)延遲隊列

    目錄 1.rabbitmq簡介 2.延遲隊列 3.Springboot集成rabbitmq 4.以死信隊列形式實現(xiàn) 5.以插件形式實現(xiàn) ?MQ(message queue),從字面意思上看,本質(zhì)是個隊列,遵從先入先出的規(guī)則,只不過隊列中存放的內(nèi)容是 message 而已,是一種跨進(jìn)程的通信機制,用于上下游傳遞消息。RabbitMq是開發(fā)中常用

    2024年02月05日
    瀏覽(26)
  • RabbitMQ+springboot用延遲插件實現(xiàn)延遲消息的發(fā)送

    RabbitMQ+springboot用延遲插件實現(xiàn)延遲消息的發(fā)送

    延遲隊列:其實就是死信隊列中消息過期的特殊情況 延遲隊列應(yīng)用場景: 可以用死信隊列來實現(xiàn),不過死信隊列要等上一個消息消費成功,才會進(jìn)行下一個消息的消費,這時候就需要用到延遲插件了,不過要線在docker上裝一個插件 前置條件是在Docker中部署過RabbitMq。 1、打開

    2024年02月10日
    瀏覽(24)
  • Rabbitmq入門與應(yīng)用(五)-延遲隊列的設(shè)計與實現(xiàn)

    Rabbitmq入門與應(yīng)用(五)-延遲隊列的設(shè)計與實現(xiàn)

    在開發(fā)過程中涉及到延遲隊列的應(yīng)用,例如訂單生成后有30分鐘的付款時間,注冊是有60秒的郵件或者短信的發(fā)送讀取時間等。 常規(guī)使用rabbitmq設(shè)計延遲隊列有兩種方式 使用創(chuàng)建一個延遲隊列阻塞消息 使用延遲隊列插件 Dead Letter Exchanges — RabbitMQ 配置 To set the DLX for a queue, s

    2024年02月21日
    瀏覽(26)
  • rabbitMq實現(xiàn)延遲隊列,阿里最愛考的前端面試題

    rabbitMq實現(xiàn)延遲隊列,阿里最愛考的前端面試題

    @Qualifier(“deadLetterExchange”) DirectExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with(DEAD_LETTER_QUEUEA_ROUTING_KEY); } // 聲明死信隊列B綁定關(guān)系 @Bean public Binding deadLetterBindingB(@Qualifier(“deadLetterQueueB”) Queue queue, @Qualifier(“deadLetterExchange”) DirectExchange exchange) { return BindingBuilder.

    2024年04月14日
    瀏覽(19)
  • SpringCloudStream整合RabbitMQ用ttl+死信實現(xiàn)延遲隊列的實踐

    這篇是關(guān)于我使用Spring Cloud Steam操作RabbitMQ采用ttl+死信隊列的方式實現(xiàn)的延遲隊列。 在公司項目中遇到了需要延遲隊列的需求,為了以后可維護性和擴展性要求必須要用Springcloud Stream組件來操作mq,而且公司的rabbit也不允許安裝延遲插件,只能用最原始的ttl+死信來實現(xiàn),在搭

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包