1. 程式人生 > >spring boot操作rabbitmq的工作佇列示例

spring boot操作rabbitmq的工作佇列示例

專案基礎結構參考:

原始碼:

工作過程

生產者每隔1秒傳送一條資訊到test_work_queue佇列中

工作佇列有兩種工作方式:

輪詢分發round-robin:

程式碼裡進行了測試,將consumer01執行緒暫停4秒再執行,在round-robin情況下,仍會輪詢分發。

結果:

生產者


消費者1:

由於sleep 4s,所以執行起來要比消費者2慢很多


消費者2:

雖然消費者2執行的快,但是由於設定為round-robin,不會多進行訊息處理


公平分發fairdispatch:

告訴RabbitMQ不要同時將多個訊息分派給一個工作者,換句話說,在某個工作者處理完一條訊息並確認它之前,RabbitMQ不會給該工作者分派新的訊息,而是將新的訊息分派給下一個不是很繁忙的工作者 這就是fair dispatch

//如果不設定,預設是round-robin

factory.setPrefetchCount(1);

並且註釋掉(為什麼要註釋掉呢?

factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);

結果:

消費者1:


消費者2:


可以看到目前是fairdispatch方式

訊息應答和訊息持久化

注意以下兩點:

1. 自動應答

為true說明佇列把訊息給消費者之後就將訊息從其記憶體中刪除。如果殺掉正在執行任務的消費者,就會丟失訊息。

為false,關閉自動應答,說明佇列把訊息給消費者之後要等待消費者的確認處理完成訊息。如果未收到消費者的確認處理完成訊息,就會分發給其他消費者,保證訊息不丟失。

factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
 

2. 訊息持久化

如果rabbitmq掛了,那麼儲存在記憶體中的訊息就會丟失了,這裡涉及到durable的問題。將佇列設定為durable實現訊息持久化

    @Bean

    public Queue queue(){

        return new Queue(QUEUE_NAME,true);

    }

參考:

RabbitMQ入門教程 For Java【2】 - Work Queues

相關推薦

spring boot操作rabbitmq工作佇列示例

專案基礎結構參考:原始碼:工作過程生產者每隔1秒傳送一條資訊到test_work_queue佇列中工作佇列有兩種工作方式:輪詢分發round-robin:程式碼裡進行了測試,將consumer01執行緒暫停4秒再執行,在round-robin情況下,仍會輪詢分發。結果:生產者

spring boot操作rabbitmq的釋出訂閱佇列示例

專案基礎結構參考:工作過程:生產者每個1秒將訊息傳送給rabbitmq的fanout型別的Exchange上,fanout不處理路由routingkey,只要與之繫結的佇列都能收到訊息。兩個消費者宣告不同的佇列佇列,並繫結到Exchange上注意:exchanger沒有儲存訊

Spring Boot 實現 RabbitMQ 延遲消費和延遲重試佇列

並增加了自己的一些理解,記錄下來,以便日後查閱。 專案原始碼: 背景 何為延遲佇列? 顧名思義,延遲佇列就是進入該佇列的訊息會被延遲消費的佇列。而一般的佇列,訊息一旦入隊了之後就會被消費者馬上消費。 延遲佇列能做什麼?延遲佇列多用於需要延遲工作的場景。最常見的是以下兩種場景: 延遲消費。比如:使用者生成

如何使用Spring BootRabbitMQ結合實現延遲佇列

背景 何為延遲佇列? 顧名思義,延遲佇列就是進入該佇列的訊息會被延遲消費的佇列。而一般的佇列,訊息一旦入隊了之後就會被消費者馬上消費。 延遲佇列能做什麼?延遲佇列多用於需要延遲工作的場景。最常見的是以下兩種場景:延遲消費。比如: 使用者生成訂單之後

Spring Boot文件上傳示例(Ajax和REST)

模型 custom rop null nds con and 程序 docs 本文介紹如何使用Ajax請求在Spring Boot Web應用程序(REST結構)中上傳文件。 本文中使用的工具: Spring Boot 1.4.3.RELEASE Spring 4.3.5

spring boot 操作MySQL pom添加的配置

version pri nec style -c 1.0 work ng- jdb   1 在項目中的pom.xml配置文件添加依賴 <!--MySQL依賴 --> <dependency> <groupId>my

Spring Boot (25) RabbitMQ消息隊列

res bin context 程序 了解 可靠 版本 prope message MQ全程(Message Queue)又名消息隊列,是一種異步通訊的中間件。可以理解為郵局,發送者將消息投遞到郵局,然後郵局幫我們發送給具體的接收者,具體發送過程和時間與我們無關,常見的MQ

Spring boot操作數據庫

data- group tid mysq pos nec boot sta mys 1.首先需要添加支持依賴 <dependency> <groupId>org.springframework.boot</groupId>

Spring Boot AMQP+RabbitMq

主要解決兩個問題: 1如何傳送/釋出訊息(將java物件序列化為json),通過使用RabbitTemplate 2如何讀取消費訊息(json反序列化為java物件)使用@RabbitListener註解 amqp是一個規範,一種定義了兩個系統間通過訊息進行互動的協議,而RabbitMQ

rabbitmq--工作佇列(單發多收)模型

上一篇,我們介紹了rabbitmq中最簡單的一種模型——收發模型,收、發都只有一方,即一個應用,並且不涉及到exchange (實際上這種模型中也是有exchange的,exchange的型別為direct,且名稱為空字串"",只不過這裡的exchange是透明的,故常被我們所忽略了,好像收、發

Spring-boot 整合RabbitMQ ------基於註解的開發

spring: rabbitmq: host: 192.168.3.193 username: guest password: guest package com.shi.amqp; import org.springframework.amqp.rab

Spring Boot @Enable*註解工作原理

一、讀取配置檔案 --application.properties tomcat.host=192.168.1.1 tomcat.port=8080 package vip.fkandy.model; import org.springframework.boot.context.pr

MongoDB最簡單的入門教程之四:使用Spring Boot操作MongoDB

Spring Boot 是一個輕量級框架,可以完成基於 Spring 的應用程式的大部分配置工作。Spring Boot的目的是提供一組工具,以便快速構建容易配置的Spring應用程式,省去大量傳統Spring專案的繁瑣配置。 MongoDB是一個基於分散式檔

Spring Boot 操作 Memcache

1    第4-1課:Spring Boot 操作 Memcache 《精通 Spring Boot 42 講》共分五大部分,第四部分主要講解 Spring Boot 和中介軟體的使用,共 10 課,中介軟體是網際網路公司支撐高併發業務的必備元件,常用的元件有快取、訊息中介軟體

Spring-Boot整合RabbitMQ

RabbitMQ 即一個訊息佇列,主要是用來實現應用程式的非同步和解耦,同時也能起到訊息緩衝,訊息分發的作用。 訊息中介軟體在網際網路公司的使用中越來越多,剛才還看到新聞阿里將RocketMQ捐獻給了apache,當然了今天的主角還是講RabbitMQ。訊息中介軟體最主

第九篇:Spring Boot整合RabbitMQ

RabbitMQ是一個開源的訊息代理和佇列伺服器,用來通過普通協議在完全不同的應用之間共享資料,或者簡單地將作業佇列以便讓分散式伺服器進行處理。訊息佇列使用訊息將應用程式連線起來,這些訊息通過像RabbitMQ這樣的訊息代理伺服器在應用程式之間路由。這篇文章將帶你瞭解怎麼整合Rabbit

Spring boot整合RabbitMQ的簡單使用

最近訊息佇列的使用比較頻繁,目前我使用比較多的就是RabbitMQ了,在專案中一般使用訊息佇列的場景有如下幾個地方。 1.非同步的處理:比如在註冊,或者專案中狀態改變需要給對應的角色傳送郵件,簡訊的時候。應該採用訊息佇列把事件放入佇列,讓傳送郵件的服務去做傳送的事件。 2

基於spring boot 2.x的websocket示例

/** * @author junmingyang */ public class DemoWebSocketClient { public static final String SEND_URL = GlobalConsts.APP_PREFIX + GlobalConsts.

Spring Boot整合RabbitMQ

訂閱程式 原始碼 @Bean public SimpleMessageListenerContainer customerMessageContainer() { SimpleMessage

php rabbitmq延遲佇列示例

<?php /** * Created by PhpStorm. * User: he * Date: 17-7-17 * Time: 下午5:38 */ namespace AcmeBundle\Service; use PhpAmq