中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站升級(jí)中模板站長(zhǎng)統(tǒng)計(jì)幸福寶

網(wǎng)站升級(jí)中模板,站長(zhǎng)統(tǒng)計(jì)幸福寶,阿里云服務(wù)器一年多少錢,安康網(wǎng)站開發(fā)要使用 RabbitMQ Delayed Message Plugin 實(shí)現(xiàn)延時(shí)隊(duì)列,首先需要確保插件已安裝并啟用。以下是實(shí)現(xiàn)延時(shí)隊(duì)列的步驟和代碼示例。 1. 安裝 RabbitMQ Delayed Message Plugin 首先,確保你的 RabbitMQ 安裝了 rabbitmq-delayed-message-exchange 插件。你可…

要使用 RabbitMQ Delayed Message Plugin 實(shí)現(xiàn)延時(shí)隊(duì)列,首先需要確保插件已安裝并啟用。以下是實(shí)現(xiàn)延時(shí)隊(duì)列的步驟和代碼示例。

1. 安裝 RabbitMQ Delayed Message Plugin

首先,確保你的 RabbitMQ 安裝了 rabbitmq-delayed-message-exchange 插件。你可以通過以下命令安裝和啟用插件:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

2. 創(chuàng)建交換機(jī)和隊(duì)列

你需要?jiǎng)?chuàng)建一個(gè) 延時(shí)交換機(jī)x-delayed-message)和一個(gè)普通隊(duì)列。我們將在發(fā)送消息時(shí)指定延遲時(shí)間。

3. 發(fā)送延遲消息的代碼示例

假設(shè)你已經(jīng)在 RabbitMQ 中設(shè)置了延時(shí)交換機(jī)。以下是使用 Java 和 Spring AMQP 發(fā)送延遲消息的代碼示例。

Maven 依賴

確保你的項(xiàng)目中已經(jīng)添加了 Spring AMQP 相關(guān)依賴:

<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-amqp</artifactId><version>2.4.6</version>  <!-- 適配你使用的版本 -->
</dependency>

配置延時(shí)交換機(jī)和隊(duì)列

你需要配置一個(gè) 延時(shí)交換機(jī)隊(duì)列,并設(shè)置消息的延遲時(shí)間。

@Configuration
public class RabbitConfig {// 創(chuàng)建一個(gè)延時(shí)交換機(jī)@Beanpublic CustomExchange delayedExchange() {Map<String, Object> arguments = new HashMap<>();// 設(shè)定交換機(jī)類型為延時(shí)交換機(jī)arguments.put("x-delayed-type", "direct");return new CustomExchange("delayed-exchange", "x-delayed-message", true, false, arguments);}// 創(chuàng)建隊(duì)列@Beanpublic Queue delayedQueue() {return new Queue("delayed-queue", true);}// 將隊(duì)列綁定到延時(shí)交換機(jī)@Beanpublic Binding binding(Queue delayedQueue, CustomExchange delayedExchange) {return BindingBuilder.bind(delayedQueue).to(delayedExchange).with("delayed.routing.key").noargs();}
}

發(fā)送延遲消息

在消息發(fā)送時(shí),你需要通過設(shè)置消息的屬性來指定延遲時(shí)間。可以使用 AMQP.BasicProperties 來設(shè)置消息的 x-delay 屬性,這個(gè)值表示延遲的時(shí)間(單位:毫秒)。

@Service
public class MessageProducer {@Autowiredprivate AmqpTemplate amqpTemplate;public void sendDelayedMessage(String message, int delayMilliseconds) {// 創(chuàng)建消息屬性,并設(shè)置延遲時(shí)間MessageProperties messageProperties = new MessageProperties();messageProperties.setDelay(delayMilliseconds);  // 設(shè)置延遲時(shí)間(毫秒)Message messageObj = new Message(message.getBytes(), messageProperties);// 發(fā)送消息到延時(shí)交換機(jī)amqpTemplate.send("delayed-exchange", "delayed.routing.key", messageObj);System.out.println("Sent delayed message: " + message + " with delay: " + delayMilliseconds + " ms");}
}

在上面的代碼中,setDelay(delayMilliseconds) 方法設(shè)置了延遲時(shí)間。這個(gè)時(shí)間會(huì)告訴 RabbitMQ 延遲多久后將消息投遞到隊(duì)列中。

監(jiān)聽消息

最后,你需要設(shè)置消費(fèi)者來監(jiān)聽這個(gè)延時(shí)隊(duì)列,并處理接收到的消息:

@Service
public class MessageConsumer {@RabbitListener(queues = "delayed-queue")public void consume(String message) {System.out.println("Received delayed message: " + message);}
}

4. 測(cè)試發(fā)送延遲消息

現(xiàn)在,你可以在業(yè)務(wù)邏輯中調(diào)用 sendDelayedMessage 方法發(fā)送延時(shí)消息。例如,發(fā)送一條延遲 10 秒的消息:

@Autowired
private MessageProducer messageProducer;public void testDelay() {// 發(fā)送一條延遲10秒的消息messageProducer.sendDelayedMessage("Hello, delayed world!", 10000);
}

5. 啟動(dòng)和測(cè)試

  1. 啟動(dòng)你的 Spring Boot 應(yīng)用。
  2. 調(diào)用 testDelay 方法發(fā)送延遲消息。
  3. 你將看到消息在隊(duì)列中延遲指定的時(shí)間(例如,10秒)后被消費(fèi)。

關(guān)鍵點(diǎn):

  • 通過 x-delayed-message 交換機(jī),設(shè)置 x-delayed-typedirecttopic,根據(jù)需求選擇交換機(jī)類型。
  • 使用 setDelay 方法設(shè)置延遲時(shí)間,單位是毫秒。
  • RabbitMQ 會(huì)在指定的時(shí)間到達(dá)后,將消息投遞到目標(biāo)隊(duì)列。

總結(jié)

通過 RabbitMQ Delayed Message Plugin,你可以非常方便地實(shí)現(xiàn)延時(shí)隊(duì)列。只需要?jiǎng)?chuàng)建一個(gè)支持延遲的交換機(jī),并通過設(shè)置 x-delay 屬性來指定消息的延遲時(shí)間。

配置并行消費(fèi)

要啟動(dòng)多個(gè)消費(fèi)者并并行處理 RabbitMQ 中的消息,通常可以通過 Spring AMQPRabbitListener 實(shí)現(xiàn)。這將幫助你加快消費(fèi)速度,提升系統(tǒng)的吞吐量。下面是如何啟動(dòng)多個(gè)消費(fèi)者進(jìn)行并行消費(fèi)的代碼修改步驟:

1. 配置多個(gè)消費(fèi)者

Spring AMQP 支持使用 @RabbitListener 注解啟動(dòng)多個(gè)消費(fèi)者實(shí)例。通過配置 并行消費(fèi)者,Spring 會(huì)為每個(gè)消費(fèi)者實(shí)例分配一個(gè)獨(dú)立的線程來處理消息。

2. 增加消費(fèi)者并發(fā)處理能力

為了實(shí)現(xiàn)并發(fā)消費(fèi),我們可以通過以下幾種方式:

  • 使用 @RabbitListener 啟動(dòng)多個(gè)消費(fèi)者實(shí)例:每個(gè) @RabbitListener 注解的消費(fèi)者都會(huì)獨(dú)立地消費(fèi)隊(duì)列中的消息。
  • 配置 SimpleMessageListenerContainer 的并發(fā)設(shè)置:通過配置 SimpleMessageListenerContainer,你可以設(shè)置多個(gè)消費(fèi)者同時(shí)監(jiān)聽隊(duì)列,從而提高并發(fā)消費(fèi)能力。

3. 代碼修改示例

1) 創(chuàng)建并發(fā)消費(fèi)者

首先,創(chuàng)建一個(gè)通用的消息監(jiān)聽器,并將 @RabbitListener 注解應(yīng)用于多個(gè)消費(fèi)者實(shí)例上。你可以通過 @RabbitListener 注解中的 concurrency 屬性來設(shè)置消費(fèi)者的并發(fā)數(shù)量。

@Service
public class ConcurrentMessageConsumer {// 使用 @RabbitListener 注解配置多個(gè)并發(fā)消費(fèi)者,默認(rèn)啟動(dòng)2個(gè)消費(fèi)者@RabbitListener(queues = "delayed-queue", concurrency = "3-5")  // 設(shè)置并發(fā)消費(fèi)者數(shù)目 3-5 個(gè)消費(fèi)者public void consume(String message) {System.out.println("Thread: " + Thread.currentThread().getName() + " - Received message: " + message);}
}

在上面的代碼中,concurrency = "3-5" 表示 Spring 會(huì)啟動(dòng) 3 到 5 個(gè)消費(fèi)者實(shí)例來并行處理隊(duì)列中的消息。消費(fèi)者數(shù)目是動(dòng)態(tài)的,具體數(shù)量由 Spring 的消息監(jiān)聽容器控制。

  • "3-5" 表示最低啟動(dòng) 3 個(gè)消費(fèi)者,最多啟動(dòng) 5 個(gè)消費(fèi)者來并行處理消息。
  • 如果消息量很大,Spring 會(huì)動(dòng)態(tài)調(diào)整消費(fèi)者的數(shù)量,以適應(yīng)系統(tǒng)的負(fù)載。

2) 配置并發(fā)消費(fèi)者的線程池(可選)

為了更好地控制消費(fèi)者的線程池和消息消費(fèi)的并發(fā)度,你可以通過配置 SimpleMessageListenerContainer 來定義更具體的并發(fā)設(shè)置。例如,你可以在 Spring 配置類中手動(dòng)定義消費(fèi)者容器。

@Configuration
public class RabbitConfig {@Beanpublic SimpleMessageListenerContainer messageListenerContainer(ConnectionFactory connectionFactory,MessageListener messageListener) {SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.setQueueNames("delayed-queue");container.setMessageListener(messageListener);// 設(shè)置并發(fā)消費(fèi)的最小值和最大值container.setConcurrentConsumers(3);  // 最小3個(gè)消費(fèi)者container.setMaxConcurrentConsumers(10);  // 最大10個(gè)消費(fèi)者return container;}
}
  • setConcurrentConsumers(3):設(shè)置最小消費(fèi)者數(shù)量。
  • setMaxConcurrentConsumers(10):設(shè)置最大消費(fèi)者數(shù)量,Spring 會(huì)根據(jù)消息的積壓情況動(dòng)態(tài)調(diào)整消費(fèi)者的數(shù)量。

3) 控制消費(fèi)者的負(fù)載和流量

如果你希望更精細(xì)地控制消息消費(fèi)的負(fù)載,可以使用 @RabbitListener 注解中的 acknowledgeMode 設(shè)置來調(diào)整消息確認(rèn)模式,確保消息被正確地處理和確認(rèn)。例如,使用 MANUAL 手動(dòng)確認(rèn)消費(fèi):

@RabbitListener(queues = "delayed-queue", ackMode = "MANUAL")
public void consumeWithAck(Message message, Channel channel) throws IOException {try {// 消費(fèi)消息System.out.println("Consumed message: " + new String(message.getBody()));// 手動(dòng)確認(rèn)消息channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);} catch (Exception e) {// 處理異常,手動(dòng)拒絕消息channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);}
}

通過手動(dòng)確認(rèn),你可以更好地控制消息的確認(rèn)和失敗重試機(jī)制,防止在消費(fèi)者掛掉的情況下丟失消息。

4. 測(cè)試并發(fā)消費(fèi)

你可以通過調(diào)用 testDelay 方法或者其他方式,發(fā)送延時(shí)消息來驗(yàn)證并發(fā)消費(fèi)是否生效。發(fā)送的消息會(huì)被多個(gè)消費(fèi)者并行處理,輸出的日志中會(huì)顯示哪個(gè)線程消費(fèi)了哪個(gè)消息,從而驗(yàn)證消費(fèi)者的并發(fā)能力。

@Autowired
private MessageProducer messageProducer;public void testDelay() {// 發(fā)送一條延遲10秒的消息messageProducer.sendDelayedMessage("Hello, delayed world!", 10000);
}

5. 總結(jié)

通過配置多個(gè)并發(fā)消費(fèi)者來加速消息消費(fèi),有以下幾個(gè)要點(diǎn):

  • 使用 @RabbitListener(concurrency = "3-5") 注解來啟動(dòng)多個(gè)并發(fā)消費(fèi)者。
  • 配置 SimpleMessageListenerContainer 來更靈活地管理消費(fèi)者線程池。
  • 使用手動(dòng)確認(rèn)模式(ackMode = "MANUAL")可以更精細(xì)地控制消息確認(rèn)和失敗重試。

通過這些配置,你可以根據(jù)消息量的大小和系統(tǒng)負(fù)載動(dòng)態(tài)調(diào)整消費(fèi)者數(shù)量,以達(dá)到加快消費(fèi)速度的目的。

http://www.risenshineclean.com/news/5895.html

相關(guān)文章:

  • 怎樣修改網(wǎng)站模板百度seo網(wǎng)站優(yōu)化 網(wǎng)絡(luò)服務(wù)
  • 赤峰專業(yè)的網(wǎng)站建設(shè)谷歌搜索引擎優(yōu)化
  • 哪個(gè)網(wǎng)站可以做付郵免費(fèi)送活動(dòng)怎么免費(fèi)自己做推廣
  • 做詐騙網(wǎng)站犯什么法西安百度公司地址介紹
  • 煙臺(tái)網(wǎng)站改版網(wǎng)站快速收錄
  • 新手去哪個(gè)網(wǎng)站做翻譯搜索引擎哪個(gè)最好用
  • 餐飲網(wǎng)站建設(shè)百度com百度一下你
  • 平安好車主app下載官方網(wǎng)站下載推廣拉新app哪幾個(gè)靠譜
  • 做涉黃的視頻網(wǎng)站用什么服務(wù)器域名注冊(cè)需要多少錢
  • 湖北省建設(shè)招投標(biāo)監(jiān)督機(jī)構(gòu)網(wǎng)站營(yíng)銷型網(wǎng)站建設(shè)多少錢
  • 無錫網(wǎng)站的建設(shè)搜索引擎優(yōu)化關(guān)鍵詞選擇的方法有哪些
  • 做網(wǎng)站設(shè)計(jì)的都轉(zhuǎn)行干啥了網(wǎng)址如何被快速收錄
  • 做網(wǎng)站找云無限seo搜索優(yōu)化排名
  • 北京的制作網(wǎng)站的公司在哪里seo學(xué)校培訓(xùn)
  • 汽車圖片查詢網(wǎng)站源碼十大網(wǎng)站排行榜
  • 醫(yī)療網(wǎng)站建設(shè)公司哪家好百度站點(diǎn)
  • 電子商務(wù)網(wǎng)站規(guī)劃書范文桂林市天氣預(yù)報(bào)
  • 寧波網(wǎng)站設(shè)計(jì)企業(yè)網(wǎng)頁(yè)制作的步驟
  • 設(shè)計(jì)師培訓(xùn) 網(wǎng)站seo資訊
  • 網(wǎng)站建設(shè)是在商標(biāo)哪個(gè)類別16888精品貨源入口
  • 做圖片詳情網(wǎng)站如何注冊(cè)自己的網(wǎng)站
  • 百度主動(dòng)提交工具 wordpress關(guān)鍵詞排名手機(jī)優(yōu)化軟件
  • 綜合網(wǎng)站推廣百度站長(zhǎng)快速收錄
  • ??诰W(wǎng)站建設(shè)專家評(píng)價(jià)網(wǎng)站推廣的方法和途徑
  • wordpress代碼高亮顯示北京seo案例
  • 河南住房和城鄉(xiāng)建設(shè)廳網(wǎng)官方網(wǎng)站全球搜索網(wǎng)站排名
  • 網(wǎng)站建設(shè)目錄結(jié)構(gòu)doc站長(zhǎng)工具官網(wǎng)查詢
  • wordpress twenty fourteen主題做的演示網(wǎng)站新網(wǎng)店怎么免費(fèi)推廣
  • 專門做推廣的網(wǎng)站網(wǎng)絡(luò)營(yíng)銷平臺(tái)的主要功能
  • 網(wǎng)站建設(shè)中心ping站長(zhǎng)工具