欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RabbitMQ實現(xiàn)Work Queue工作隊列的示例詳解

 更新時間:2023年01月10日 10:28:56   作者:小威要向諸佬學(xué)習(xí)呀  
工作隊列(又稱任務(wù)隊列)的主要思想是避免立即執(zhí)行資源密集型任務(wù),而不得不等待它完成。本篇文章將記錄和分享RabbitMQ工作隊列相關(guān)的知識點,希望對大家有所幫助

RabbitMQ Work Queue工作隊列

工作隊列(又稱任務(wù)隊列)的主要思想是避免立即執(zhí)行資源密集型任務(wù),而不得不等待它完成。

相反我們安排任務(wù)在之后執(zhí)行。我們把任務(wù)封裝為消息并將其發(fā)送到隊列。在后臺運行的工作進(jìn)程將彈出任務(wù)并最終執(zhí)行作業(yè)。當(dāng)有多個工作線程時,這些工作線程將一起處理這些任務(wù)。

多個消費者綁定到一個隊列,同一條消息只會被一個消費者處理。

但是對于工作隊列,可以提高消息的處理速度,避免隊列中的消息堆積。

我們以一個例子來解釋work queue工作隊列。在生產(chǎn)者的服務(wù)中添加測試方法,通過循環(huán)的方式,向名為simple.queue隊列中發(fā)送50條消息,代碼和詳細(xì)描述如下:

package cn.itcast.mq.spring;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringAmqpTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSendMessage2WorkQueue() throws InterruptedException {
        String queueName="simple.queue";//隊列名稱
        String message = "hello, message_";//發(fā)送的消息
        for (int i=1;i<=50;i++){
            rabbitTemplate.convertAndSend(queueName,message+i);
            Thread.sleep(20);
        }
    }
}

在消費者的服務(wù)模塊中,定義兩個消息監(jiān)聽,分別為listenSimpleQueue1和listenSimpleQueue2,讓它們都監(jiān)聽simple.queue隊列,并且設(shè)置休眠時間,使得消費者1每秒處理50條消息,消費者2每秒處理10條消息。

package cn.itcast.mq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.time.LocalTime;
@Component
public class SpringRabbitListener {
    @RabbitListener(queues="simple.queue")
    public void listenSimpleQueue1(String msg) throws InterruptedException {
        System.out.println("消費者1已經(jīng)接收到simple.queue的消息:[" + msg +  "]"+ LocalTime.now());
        Thread.sleep(20);
    }
    @RabbitListener(queues="simple.queue")
    public void listenSimpleQueue2(String msg) throws InterruptedException {
        System.err.println("消費者2已經(jīng)接收到simple.queue的消息:[" + msg +  "]"+LocalTime.now());
        Thread.sleep(200);
    }
}

消費者的application.yaml文件,設(shè)置消費者每次只能獲取一條消息,生產(chǎn)者和消費者的配置文件相似。

logging:
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
spring:
  rabbitmq:
    host: 192.168.220.13*
    port: 5672
    username: user
    password: ******
    virtual-host: /
    Listener:
      simple:
        prefetch: 1 #每次只能獲取一條消息,處理完成才能獲取下一條消息 控制消費者預(yù)取消息的上限

處理完成后,運行項目,可以得到消費者1和消費者2都能消費消息,并且可以根據(jù)休眠時間有序進(jìn)行工作。

到此這篇關(guān)于RabbitMQ實現(xiàn)Work Queue工作隊列的示例詳解的文章就介紹到這了,更多相關(guān)RabbitMQ Work Queue內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中的事務(wù)隔離級別和傳播行為

    Spring中的事務(wù)隔離級別和傳播行為

    這篇文章主要介紹了Spring中的事務(wù)隔離級別和傳播行為,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作

    java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作

    這篇文章主要介紹了java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot JPA懶加載失效的解決方案(親測有效)

    SpringBoot JPA懶加載失效的解決方案(親測有效)

    這篇文章主要介紹了SpringBoot JPA懶加載失效的解決方案(親測有效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中線程的基本方法使用技巧

    Java中線程的基本方法使用技巧

    這篇文章主要介紹了Java中線程的基本方法使用技巧,需要的朋友可以參考下
    2017-09-09
  • Spring DevTools的介紹

    Spring DevTools的介紹

    今天小編就為大家分享一篇關(guān)于Spring DevTools的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 解決常見的Eclipse SVN插件報錯方法詳解

    解決常見的Eclipse SVN插件報錯方法詳解

    本篇文章是對常見的Eclipse SVN插件報錯方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 關(guān)于stream().sorted()以及java中常用的比較器排序

    關(guān)于stream().sorted()以及java中常用的比較器排序

    這篇文章主要介紹了關(guān)于stream().sorted()以及java中常用的比較器排序,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Springboot整合https的實例代碼

    Springboot整合https的實例代碼

    本文簡單介紹了一些密碼學(xué)的基礎(chǔ)和如何通過Springboot整合HTTPS,本文將通過實例代碼給大家詳細(xì)介紹整合過程,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • 在SpringBoot項目中利用maven的generate插件

    在SpringBoot項目中利用maven的generate插件

    今天小編就為大家分享一篇關(guān)于在SpringBoot項目中利用maven的generate插件,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java實現(xiàn)線程的暫停和恢復(fù)的示例詳解

    Java實現(xiàn)線程的暫停和恢復(fù)的示例詳解

    這幾天的項目中,客戶給了個需求,希望我可以開啟一個任務(wù),想什么時候暫停就什么時候暫停,想什么時候開始就什么時候開始,所以本文小編給大家介紹了Java實現(xiàn)線程的暫停和恢復(fù)的示例,需要的朋友可以參考下
    2023-11-11

最新評論